我们使用一系列托管在新加坡区域的 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 凭证之前已为您检索和缓存了这些凭证。这也应该有助于提高性能。