我目前对使用哪个数据库进行地理位置跟踪感到有些困惑。我想做的是每30秒更新一组人的位置。数据使用网络套接字发送到服务器。每个用户在数据库中都有一个ID,我想每30秒更新一次该用户的位置。这样做之后,我想查询这些位置并将其实时显示给另一组用户。我的问题是DynamoDb和Redis的优点和缺点是什么?哪一个更快,可以更轻松地扩展。我预计将达到200万个QPS
答案 0 :(得分:1)
两者都可以很好地扩展,但这在很大程度上取决于您的用例和体系结构。
DynamoDB是基于云的NoSQL存储系统,而Redis是内存中数据结构存储。这意味着,对DynamoDB的查询将涉及到Amazon服务器的往返,而对Redis的查询将通过RAM(因此,延迟要低得多)。
由于上述原因,可以在Redis中存储的数据量将受到硬件上可用RAM的限制。就是说,如果Redis或由于某种原因导致硬件崩溃,您将不得不满足一定程度的数据丢失需求。您可以通过配置Redis持久性来减轻这种情况,以便Redis定期(每N秒或通过手动触发代码中的写入操作)写入磁盘,并通过将这些写入复制到S3或其他位置来进一步缓解。由于I / O延迟,这在性能上(取决于您的规模)在数据安全性方面进行了权衡。请参阅GitHub工程团队的the documentation for Redis persistence和this blog post,其中提到出于性能原因决定删除Redis持久性的决定。
同时,自AWS handles availability起,DynamoDB为您在幕后为您提取了上述所有问题。您实际上仅受how much you can afford和使用量(每秒读/写)limits的限制。
DynamoDB不具有查询和插入地理空间数据的本机支持(尽管there is a library for it,但似乎没有得到维护),Redis does。您可以为此编写自己的代码。
DynamoDB does not have support for namespacing,或者说,DynamoDB由您的AWS账户命名空间,这意味着您将无法在同一AWS账户上维护具有相同表名(例如生产数据与开发数据)的单独DynamoDB实例。 Redis也不是,但是您可以为此微调一个单独的Redis实例。