代码之家  ›  专栏  ›  技术社区  ›  Ahmed

Redis与DynaModb地理位置跟踪

  •  1
  • Ahmed  · 技术社区  · 6 年前

    我现在有点困惑,要使用哪个数据库进行地理定位跟踪。我要做的是每30秒更新一组人的位置。数据使用Web套接字发送到服务器。每个用户在数据库中都有一个ID,我想每30秒更新一次该用户的位置。这样做之后,我想查询这些位置,并将其实时显示给另一组用户。我的问题是,dynamodb和redis的优点和缺点是什么。哪一个更快,更容易缩放。我预计大约有200万匹匹

    1 回复  |  直到 6 年前
        1
  •  1
  •   Hugo    6 年前

    两者都可以很好地扩展,但这很大程度上取决于您的用例和体系结构。

    dynamodb是一个基于云的nosql存储系统,redis是一个内存中的数据结构存储。这意味着对dynamodb的查询需要往返于Amazon的服务器,而对redis的查询则需要通过RAM(因此,延迟要低得多)。

    因此,您可以在Redis中存储的数据量将受到硬件上可用RAM的限制。也就是说,如果Redis或您的硬件因某种原因崩溃,您必须满足于某种程度的数据丢失。您可以通过配置redis持久性来减轻这一点,以便redis定期(每N秒或通过手动触发代码写入)写入磁盘,然后通过将这些写入复制到S3或其他位置来进一步减轻。这在某种程度上是由于I/O延迟,为了数据安全而权衡性能(取决于您的规模)。参见 the documentation for Redis persistence this blog post Github工程团队提到他们出于性能原因决定删除Redis持久性。

    同时,以上所有问题都由dynamodb为您抽象,因为 AWS handles availability 为你在幕后。你真的只受 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实例。

    另请参见 Redis MEMORY USAGE command Redis memory optimization 文件。