Redis 与 dynamoDb 地理定位跟踪
Redis vs dynamoDb geolocation tracking
我目前对使用哪个数据库进行地理定位跟踪有点困惑。我想做的是每 30 秒更新一组人的位置。使用网络套接字将数据发送到服务器。每个用户在数据库中都有一个 Id,我想每 30 秒更新一次该用户的位置。这样做之后,我想查询这些位置并将其实时显示给另一组用户。我的问题是 DynamoDb 和 Redis 的优点和缺点是什么。哪个更快并且可以更轻松地扩展。我预计将近 200 万 QPS
两者都可以很好地扩展,但这在很大程度上取决于您的用例和架构。
DynamoDB 是一个基于云的 NoSQL 存储系统,而 Redis 是一个内存数据结构存储。这意味着对 DynamoDB 的查询将涉及到 Amazon 服务器的往返,而对 Redis 的查询将通过 RAM(因此,延迟要低得多)。
由于上述原因,您可以在 Redis 中存储的数据量将受到硬件上可用 RAM 的限制。也就是说,如果 Redis 或您的硬件由于某种原因崩溃,您将不得不满足于某种程度的数据丢失。您可以通过配置 Redis 持久性来稍微缓解这种情况,以便 Redis 定期写入磁盘(每 N 秒或通过手动触发代码中的写入),然后通过将这些写入复制到 S3 或其他地方来进一步缓解。由于 I/O 延迟,这会以性能(取决于您的规模)换取数据安全。请参阅 GitHub 工程团队的 the documentation for Redis persistence and this blog post,其中提到他们出于性能原因决定删除 Redis 持久性。
同时,自 AWS handles availability for you behind the scenes. You are really only limited by how much you can afford and usage (read/write per second) limits 以来,DynamoDB 已为您抽象出上述所有问题。
DynamoDB 本身不支持查询和插入地理空间数据(尽管 there is a library for it, but it seems to be unmaintained), Redis does。您可以为此编写自己的代码。
DynamoDB does not have support for namespacing,或者更确切地说,DynamoDB 由您的 AWS 帐户命名空间,这意味着您将无法维护具有相同 table 名称的单独 DynamoDB 实例(比如生产数据与开发数据)在同一个 AWS 账户上。 Redis 也没有,但您可以为此简单地启动一个单独的 Redis 实例。
另请参阅 Redis MEMORY USAGE command and Redis memory optimization 文档。
我目前对使用哪个数据库进行地理定位跟踪有点困惑。我想做的是每 30 秒更新一组人的位置。使用网络套接字将数据发送到服务器。每个用户在数据库中都有一个 Id,我想每 30 秒更新一次该用户的位置。这样做之后,我想查询这些位置并将其实时显示给另一组用户。我的问题是 DynamoDb 和 Redis 的优点和缺点是什么。哪个更快并且可以更轻松地扩展。我预计将近 200 万 QPS
两者都可以很好地扩展,但这在很大程度上取决于您的用例和架构。
DynamoDB 是一个基于云的 NoSQL 存储系统,而 Redis 是一个内存数据结构存储。这意味着对 DynamoDB 的查询将涉及到 Amazon 服务器的往返,而对 Redis 的查询将通过 RAM(因此,延迟要低得多)。
由于上述原因,您可以在 Redis 中存储的数据量将受到硬件上可用 RAM 的限制。也就是说,如果 Redis 或您的硬件由于某种原因崩溃,您将不得不满足于某种程度的数据丢失。您可以通过配置 Redis 持久性来稍微缓解这种情况,以便 Redis 定期写入磁盘(每 N 秒或通过手动触发代码中的写入),然后通过将这些写入复制到 S3 或其他地方来进一步缓解。由于 I/O 延迟,这会以性能(取决于您的规模)换取数据安全。请参阅 GitHub 工程团队的 the documentation for Redis persistence and this blog post,其中提到他们出于性能原因决定删除 Redis 持久性。
同时,自 AWS handles availability for you behind the scenes. You are really only limited by how much you can afford and usage (read/write per second) limits 以来,DynamoDB 已为您抽象出上述所有问题。
DynamoDB 本身不支持查询和插入地理空间数据(尽管 there is a library for it, but it seems to be unmaintained), Redis does。您可以为此编写自己的代码。
DynamoDB does not have support for namespacing,或者更确切地说,DynamoDB 由您的 AWS 帐户命名空间,这意味着您将无法维护具有相同 table 名称的单独 DynamoDB 实例(比如生产数据与开发数据)在同一个 AWS 账户上。 Redis 也没有,但您可以为此简单地启动一个单独的 Redis 实例。
另请参阅 Redis MEMORY USAGE command and Redis memory optimization 文档。