哪种键值对 NoSQL 数据库可以确保在断电情况下没有数据丢失?

4
目前,我们使用Redis作为内存中的快速缓存。它工作得很好。问题是,一旦重新启动Redis,我们就需要从持久存储中获取数据来重新填充它。这会使我们的持久存储超出其容量,因此恢复需要很长时间。
我们查看了Redis的持久性选项。最好的选择(不影响性能)是使用带有“每秒appendfsync”选项的AOF。但是,使用此选项,我们可能会丢失最后一秒钟的数据。那是不能接受的。使用具有“总是appendfsync”的AOF会带来相当大的性能损失。
因此,我们正在评估单节点Aerospike。它是否保证在断电情况下没有数据丢失?即针对写操作,一旦Aerospike向客户端发送成功,就永远不应该丢失数据,即使我拔掉服务器机器的电源。如上所述,我认为Redis可以在“总是appendfsync”选项下提供此保证。但是,我们不考虑它,因为它会带来相当大的性能损失。
如果Aerospike能够做到这一点,我想详细了解Aerospike中的持久性是如何工作的。请分享一些说明相同的资源。
我们不需要分布式系统,因为强一致性对我们来说是必须的。数据不应在节点故障或脑裂情况下丢失。
如果不使用Aerospike,您能否指向另一个可以帮助实现此目标的工具?
4个回答

3
这不是数据库问题,而是硬件和风险问题。 所有(具有持久性的)数据库都是以相同的方式工作的:有些将数据直接写入物理磁盘,而其他一些则告诉操作系统将其写入。确保每次写入都安全的唯一方法是等待磁盘确认数据已写入。
没有绕过此问题的方法,正如您所见,这大大降低了吞吐量。这就是为什么数据库使用内存缓冲区,并定期从缓冲区中向磁盘写入批量数据的原因。但是,这意味着存在一个小风险,即在数据写入缓冲区后但尚未写入磁盘之前发生机器问题(例如电源、磁盘故障等)会导致数据丢失。
对于单个服务器,您可以通过多个电源供应器、电池备份和其他保护措施来购买保护,但这很快就会变得棘手和昂贵。这就是为什么分布式体系结构今天如此常见,用于可用性和冗余。分布式系统并不意味着您失去了一致性,而是可以通过保护数据来帮助确保一致性。
解决您的问题最简单的方法是使用允许复制的数据库,以便每次写入都发送到至少两台不同的机器。这样,一个机器停电不会影响写入到另一台机器的数据,您的数据仍然是安全的。
您仍然需要在更高的级别上保护您免受可能影响所有服务器的断电(例如您的整个数据中心停电)的影响,但您可以通过跨越更多边界来解决此问题。这完全取决于您可以接受的风险量。
通过调整数据库中的磁盘写入间隔和使用适当的分布式体系结构,您可以获得所需的一致性和性能要求。

2
我在Aerospike工作。你可以选择将您的命名空间存储在内存中、磁盘上或内存和磁盘持久性中。在所有这些场景中,我们在真实世界的基准测试中与Redis相比表现良好。
考虑到在磁盘上进行存储时,当写操作发生时,它会先被存入缓冲区,然后再被刷新到磁盘上。在缓冲区成功写入之前,确认不会返回给客户端。如果在单节点集群中在缓冲区刷新之前拔掉电源,那么写可能已经被确认发送给客户端并随后丢失。
解决方法是在集群中有多个节点,并且复制因子大于等于2。写操作首先进入客户端和副本的缓冲区,在两者上都必须成功后才能向客户端发送确认成功信息。如果从一个节点中断电,另一个节点仍将存在副本,不会丢失数据。
因此,是的,通过低成本和最小延迟,我们可以使Aerospike尽可能地强壮。最好的方法是下载社区版并查看您的想法。我相信你会喜欢它。

嘿,本,我相信你的意思是“复制因子>=2”。 - Jan Hecking

0

0

我相信,无论你使用什么 DBMS 技术,如果你必须保证数据不会丢失,你都将受制于存储介质的延迟或集群情况下网络结构的延迟。请注意:如果整个物理设备都停电(即两个节点都停电),那么 Ben Bates 的解决方案将行不通。但是,我认为一个廉价的 UPS 可以在很大程度上减轻这种担忧,甚至完全消除这种担忧。而这些延迟将导致插入/更新/删除性能显著下降,与独立的内存数据库实例相比。

另一个要考虑的选择是使用NVDIMM存储作为内存数据库或用于恢复的写前事务日志。它将具有绝对最低的延迟(与传统DRAM相当)。如果您的内存数据库适合可用的NVDIMM内存,您将拥有最快的恢复速度(无需从事务日志重放),并且与原始IMDB性能相当,因为您回到了单个写入,而不是添加写前日志和/或在群集中复制到另一个节点需要2个以上的写入。但是,您的内存数据库系统必须能够支持直接恢复内存数据库(而不仅仅是从事务日志恢复)。但是,这种选择需要满足两个要求: 1. 整个数据库必须适合NVDIMM内存 2. 数据库系统必须能够在系统重新启动后直接恢复数据库,而无需事务日志。
更多信息请参见本白皮书http://www.odbms.org/wp-content/uploads/2014/06/IMDS-NVDIMM-paper.pdf

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