我们目前正在使用 Redis,它是一个很棒的内存数据存储。我们开始研究一些新问题,其中内存限制是一个因素,并考虑其他选项。我们遇到的一个是 Aerospike - 它似乎非常快,甚至比内存中单片操作上的 redis 还要快。
现在我们将它添加到我们的堆栈中,我试图了解 Aerospike 无法替换 redis 的用例?
Aerospike 支持的数据类型比 Redis 少,例如 Aerospike 中不提供 pub/sub。然而,Aerospike 是一种分布式键值存储,具有优越的聚类特性。
这两个都是很棒的数据库。这实际上取决于您处理的数据集有多大,以及您对增长的期望。
雷迪斯:
键/值存储,数据集适合单台机器的 RAM,或者您可以将自己分片到多台机器(和/或内核,因为它是单线程的),将数据持久化到磁盘,具有列表/集合等数据结构,基本发布/订阅,简单的从属复制,Lua 脚本。
气钉:
键/值行存储(意思是值包含带有值的箱,这些值可以是更多的映射/列表/值以具有多个级别),多线程以使用所有内核,为跨机器集群而构建,具有复制功能,并且可以跨数据中心复制,UDF 的 Lua 脚本。可以直接在 SSD 上运行,因此您可以存储更多数据,而无需将其装入 RAM。
比较:
如果您只有较小的数据集或单核性能很好,那么 Redis 非常棒。安装快速,运行简单,如果您需要更多的读取可扩展性,只需使用 1 个命令即可轻松附加从站。Redis 还具有更多独特的列表/设置/位图操作功能,因此您可以开箱即用地做“更多”。
如果您想存储更复杂或嵌套的数据,或者需要在单台机器或集群上获得更高的性能,那么 Aerospike 可以以更少的操作开销很好地完成工作。非常快速的性能和简单的集群设置,所有节点都具有完全相同的角色,因此您可以扩展读取和写入。
这就是最大的区别,即超越单核或服务器的可扩展性。使用 Lua 脚本,您通常可以将 Redis 具有的任何本机功能填充到 Aerospike 中。如果您有大量数据(例如 TB),那么 Aerospike 的 SSD 功能意味着您可以获得类似 RAM 的性能而无需 RAM 成本。
你看过基准吗?我相信每个人在不同的条件和用例下表现不同:
http://www.aerospike.com/when-to-use-aerospike-vs-redis/
https://redislabs.com/blog/nosql-performance-aerospike-cassandra-datastax-couchbase-redis
Redis 和 Aerospike 不同,各有利弊,但在以下 2 个用例中,Redis 似乎比 Aerospike 更适合:
当我们不需要复制时我们正在使用具有密集写入的大缓存和非常短的 ttl (20s) 进行重复数据删除。复制这些数据没有意义。与 Aerospike 相比,Redis 可能会使用一半的 CPU 和不到一半的 RAM。由于流水线,它会更便宜,更快,甚至更快。
当我们需要跨数据中心复制时 我们有一个大型数据库,需要从 5 个数据中心访问,需要大量写入和密集读取。没有完美的解决方案,但目前最好的解决方案似乎是将中央数据库存储在 Redis 中,并使用 Redis 主从复制将副本存储在每个数据中心。