Dynamodb 与 Redis
Posted
技术标签:
【中文标题】Dynamodb 与 Redis【英文标题】:Dynamodb vs Redis 【发布时间】:2019-11-14 03:44:30 【问题描述】:我们正在使用 AWS,并考虑在我们的新服务中使用 DynamoDB
或 Redis
。
以下是我们服务的特点
-
每分钟插入/删除的次数在数百到数千次之间,以后会更大。
我们不需要快速搜索,只需要用key找到一个值
数据不应丢失。
与
1
不同,还有另一个数据没有很多插入/删除。
我很担心Redis
服务器何时停机。
当Redis
失败时,我们的数据将被删除。
这就是我考虑选择Amazon DynamoDB
的原因。
因为DynamoDB
是NoSQL,所以Insert/Delete非常快(比Redis慢,但我们不需要那么快),并且永久存储数据。
但我不确定我的想法是否正确。
如果我想错了,或者没有想到另一个重要的点,我会很感激你们教我的。
谢谢。
【问题讨论】:
您考虑存储什么样的数据? 路径信息。所有行的架构都是相同的。每行之间不需要不同。 ***.com/questions/5400163/… 我认为这个答案与您正在寻找的答案非常相似。您可以为 redis 启用备份以将数据保存在磁盘上。 Redis Labs 的 Redis Cloud Pro 可能会为您提供具有高可用性和持久性的 Redis 解决方案,请参阅 redislabs.com/redis-enterprise/pro 【参考方案1】:AWS ElastiCache 服务中有两种类型的 Redis 部署:
-
独立
多可用区集群
通过独立安装,可以为 Redis 实例打开持久性,因此服务可以在重启后恢复数据。但在某些情况下,例如底层硬件降级,AWS 可以将 Redis 迁移到另一个实例并丢失持久性日志。
在多可用区集群安装中,无法启用持久性,只能进行复制。如果发生故障,将副本提升到主状态需要一段时间。另一种方法是直接在应用程序中使用主从端点,这很复杂。如果出现导致两个 Redis 节点同时重启的故障,也可能会丢失集群配置的所有数据。
因此,一般来说,Redis 不提供高持久性的数据,但提供了非常好的性能。
DynamoDB 是高度可用且持久的数据存储。在内部,它将数据复制到几个可用区,因此默认情况下它是高可用的。它也是完全托管的 AWS 服务,因此您无需关心集群、节点、监控...等,这是一种正确的云方式。
Dynamo DB 按 R/W 操作(按需或预留容量模型)和存储数据量收费。测试服务可能真的很便宜,但在重负载下要贵得多。您应该仔细分析您的工作量并计算总服务成本。
至于性能:DynamoDB 是一个 SSD 数据库,与 Redis 内存存储相比,但可以使用 DAX - DynamoDB 的内存缓存只读副本作为重负载的加速器。因此,您不会受到 DynamoDB 性能的严格限制。
这里是 DynamoDB 定价计算器的链接,这是服务使用中最复杂的部分之一:https://aws.amazon.com/dynamodb/pricing/
【讨论】:
DAX 不错,但它只支持 AWS SDK 1.x,不支持 AWS SDK 2.x, 早期版本的 Redis 缺乏持久性。 AWS MemoryDB 提供与 Redis 相同性能的持久性。 MemoryDB 更接近 DynamoDB 提供的功能。 AWS MemoryDb 构建在 Redis 引擎之上。 aws.amazon.com/memorydb以上是关于Dynamodb 与 Redis的主要内容,如果未能解决你的问题,请参考以下文章
python--boto3 之 与dynamoDB 的基本交互,表的备份与恢复
DynamoDB / Scanamo:提供的关键元素与架构不匹配
DynamoDB 简单 UpdateItem 抛出“提供的关键元素与架构不匹配”ValidationException