Amazon DynamoDB比Amazon RDS(php)慢吗?

时间:2012-06-20 08:50:11

标签: php mysql amazon-ec2 amazon-rds amazon-dynamodb

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

不幸的是,DynamoDB总是比RDS慢。我在与EC2实例相同的区域中创建的表中编写了一行。使用适用于php的AmazonAWS SDK读取此行需要1秒以上的时间,并且使用mysql从RDS获取行的次数要比使用mysql少10倍。

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

3 个答案:

答案 0 :(得分:5)

查看您之前的评论我说扫描是您的问题。你真的只想在绝对必要的时候使用它,即将数据提供到地图中以减少分析或沿着这些方向的某些内容。据我所知,扫描实际上会遍历每一条记录,并查找符合您条件的项目(sloooowwwww),其中get / query可以使用精确索引的哈希/范围键。

如果可能,您应该构建数据,以便查询散列/范围键,如果这不可行,您可以查看将元数据/查询字段放入cloudsearch,使用它返回然后id直接从Dynamo获取项目。您还可以设置一些非格式化表(在不同的表中重构相同的数据,以便您有不同的范围键)

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

答案 1 :(得分:4)

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

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

[注意:1秒似乎很长一段时间 - 我们能够获得多个记录<在大多数情况下,第二个,但我并没有真正使用DynamoDB方法的PHP特定SDK(只是.Net)。我想知道是否有其他东西可能会瓶颈。]

答案 2 :(得分:1)

如果您将DynamoDB与AWS SDK for PHP一起使用,则应确保及时了解所使用的SDK的最新版本。具体而言,您需要使用1.5.9+版本才能获得DynamoDB操作的最佳性能。最近解决了一些问题,这些问题为某些请求增加了额外的延迟,因此这可能对您有所帮助。

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