Redis与Aerospike的使用场景比较?

3

在 Google 和 stack overflow(下面提到的)浏览了几个资源之后,我对何时使用什么有了高层次的理解,但也有一些问题。

我的理解:

  1. 作为纯内存数据库时,两者都具有可比性的性能。但是对于大数据集,完整的数据集可能无法放入内存中,或者即使可以放入内存中(但会增加成本),AS(aerospike)可以是一个很好的选择,因为它提供了索引可以保存在内存中,数据保存在固态硬盘中的模式。我相信性能会略有降低(与完全内存中的数据库相比),但节省了成本并提供了性能,而且读/写来自 SSD 的方式使其比传统磁盘 I/O 更快。因此,当完整数据可以放入内存时,两者都可以同样好,但当内存受限时,AS 可以是一个很好的情况。对吗?

  2. 还有人说 AS 提供了丰富且易于设置的集群功能,而 Redis 中的一些集群特性需要在应用程序中处理。这是否仍然适用,还是几年前就已经是真的了(我认为是这样,因为我看到 Redis 也提供了集群功能)?

Aerospike 如何与其他键值 NoSQL 数据库不同?

Redis 何时比 Aerospike 更适合使用?

1个回答

7
您在(1)中的假设是错误的,因为它适用于(大多数)所有数据都适合内存的合成情况。当您拥有一个增长到许多TB甚至PB的系统时会发生什么?您是否想尝试将那些数据放入非常昂贵、难以管理的完全内存化的系统中,其中包含许多节点?现代机器可以存储比内存更多的SSD / NVMe驱动器。如果您查看Amazon EC2的新i3en实例系列类型,i3en.24xl具有768G RAM和60TB NVMe存储(8 x 7.5TB)。这种机器与Aerospike非常配合,因为它仅在内存中存储索引。大量的数据可以存储在这样的密集节点小群集上,并表现出色。
Aerospike在现实世界中用于集群,这些集群已经增长到数百TB甚至PB的数据(数十亿个对象),每秒服务数百万次操作,仍然达到亚毫秒至单位数字毫秒的延迟。请参见https://www.aerospike.com/summit/以获取有关该主题的几个演讲。
另一个影响(1)的方面是,如果实际部署在多个服务器上,每个服务器都有多个Redis实例,则单个Redis实例的性能会产生误导。Redis不像Aerospike一样是分布式数据库 - 它需要应用程序端分片(这变成了一种群集和水平扩展的噩梦)或单独的代理,而后者通常成为瓶颈。单个分片可以执行100万次操作,这很棒,但如果代理无法处理组合吞吐量,并且与分片竞争CPU和内存,则性能规模图像中还有更多要考虑的内容,而不仅仅是内存与SSD上的数据。
除非您正在查看数量很少的对象或不太可能增长的少量数据,否则您应该通过概念验证测试自己比较这两个。

你说Redis不像Aerospike一样是一个分布式数据库 - 它需要应用程序端分片(这会变成一种集群和水平扩展的噩梦)或单独的代理,这通常会成为瓶颈。我们可以在不同的节点上拥有多个代理,以便单个代理不会成为瓶颈吗?就像在https://redis.io/topics/partitioning中提到的那样。 - emilly
即使在Aerospike中,我相信也会有一些代理或端点,所有客户端都必须连接到它。不是吗?基本上,对于任何分布式集群,我相信方法都是相同的,即客户端连接到某个代理(有些人称其为前端控制器、接收器或主控)。 - emilly
1
在分布式数据库中,复制和分区等问题由数据库集群本身处理,而不是由用户应用程序(分片)或中间件代理外部处理。集群本身就会就数据分配到每个节点达成一致,感知新节点加入或现有节点离开,并自动处理数据的重新平衡。像MySQL、Redis这样的数据库或像memcache这样的数据存储不是分布式数据库。它们可以通过应用程序端分片或添加中间件(如Redis代理)进行临时聚集。 - Ronen Botzer
在 Aerospike、Cassandra 和其他一些数据库中没有代理。在 Aerospike 中,客户端可以连接到集群的任何节点,并且它所做的第一件事是请求其他节点的 IP 地址和分区映射。知道了分区映射,客户端就可以直接访问任何操作的正确节点。它还会跟踪集群的更改。没有前端控制器、代理、名称节点或“主节点”。请参阅 https://www.aerospike.com/docs/architecture/data-distribution.html 和 https://www.aerospike.com/docs/architecture/clustering.html。 - Ronen Botzer

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接