Amazon DynamoDB 是否比 Amazon RDS (php) 慢?


Is Amazon DynamoDB slower than Amazon RDS (php)?

我们使用一系列托管在新加坡区域的 AWS 服务。我们有几个 EC2 实例和一个 RDS 实例。我们计划将部分数据迁移到 Amazon DynamoDB,这将有助于我们的应用程序数据设计。

遗憾的是,DynamoDB 总是比 RDS 慢。我在与我们的 EC2 实例在同一区域中创建的表中编写了一行。使用 AmazonAWS 开发工具包 for php 读取此行所需的时间超过 1 秒,使用 mysql 从 RDS 读取一行所需的时间比这少 10 倍以上。

我们可以做些什么来优化这一点吗?我已经禁用了SSL,但我认为它没有太大区别。

可能。与 RDS 托管数据库(MySQL、SQL Server、Oracle)相比,DynamoDB 具有相当大的延迟,并且可以在更厚的应用程序堆栈上运行。

但是,IMO DynamoDB(以及大多数 NoSQL 数据库)的主要优势在于延迟是可靠的。如果您在记录检索中看到 400 毫秒的延迟,则可以指望 1 个会话或 100,000 个会话的 400 毫秒延迟。

[注意:1 秒看起来确实很长 - 在大多数情况下,我们能够

看看你之前的评论,我会说扫描是你的问题。您真的只想在绝对必要的时候使用它,即将数据输入 map Reduce 进行分析或类似的东西。据我所知,扫描实际上会遍历每条记录并查找符合您条件的项目 (sloooowwwww),其中 get/query 在索引良好的哈希/范围键上工作。

如果

可能的话,你应该结构化你的数据,以便你可以查询哈希/范围键,如果这不可行,你可以考虑将你的元数据/查询字段放入云搜索,使用它返回id,然后直接从Dynamo获取项目。您还可以设置一些命名表(在不同的表中重组相同的数据,以便您有不同的范围键)

你不应该看到使用 PHP SDK 的 get 和查询命令的延迟时间这么大。

如果您将 DynamoDB 与适用于 PHP 的 AWS 开发工具包配合使用,则应确保及时了解您正在使用的开发工具包版本。具体而言,您需要使用版本 1.5.9+ 才能获得最佳 DynamoDB 操作性能。最近解决了一些问题,这些问题增加了某些请求的额外延迟,因此这可能会对您有很大帮助。

此外,DynamoDB 最近还增加了对 AWS SignatureV4 对请求签名的支持,这样就不再需要 STS 凭证,而 STS 凭证之前已为您检索和缓存了这些凭证。这也应该有助于提高性能。