3

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

不幸的是,DynamoDB 总是比 RDS 慢。我在与我们的 EC2 实例在同一区域中创建的表中写了一行。使用 AmazonAWS SDK for php 读取这一行需要超过 1 秒的时间,使用 mysql 从 RDS 中获取一行需要的时间比这少 10 倍以上。

我们可以做些什么来优化它吗?我禁用了 SSL,但我认为它没有太大的不同。

4

3 回答 3

6

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

如果可能的话,您应该结构化您的数据,以便您可以查询散列/范围键,如果这不可行,您可以考虑将元数据/查询字段放入 cloudsearch,使用它返回 id,然后直接获取项目来自迪纳摩。您还可以设置一些去特征化的表(在不同的表中重组相同的数据,以便您有不同的范围键)

您不应该看到使用 PHP SDK 的 get 和 query 命令的那些大延迟时间。

于 2012-06-20T16:49:26.263 回答
6

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

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

[注意:1 秒似乎很长——在大多数情况下,我们能够获得多条记录 < 秒,但我并没有真正将 DynamoDB 方法用于 PHP 特定的 SDK(只是 .Net)。我想知道是否还有其他东西可能成为瓶颈。]

于 2012-06-20T14:47:41.230 回答
1

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

此外,DynamoDB 最近添加了对 AWS SignatureV4 签名请求的支持,这消除了 SDK 之前为您检索和缓存的 STS 凭证的需要。这也应该有助于更好的性能。

于 2012-07-18T15:34:42.547 回答