Aerospike 是一个支持持久性的密钥存储数据库。但是我可以完全信任这种持久性以将其用作数据库吗?据我了解,它首先将数据写入内存,然后将其持久化。我可以接受最终的一致性,但我不想处于提交某些内容但由于机器故障而从未写入磁盘的状态,因此永远无法检索。我尝试查看各种用例,但我只是对这个用例感到好奇。就保存新记录而言,client.put 提供了什么保证。
Aerospike 提供用户可配置的复制因子。大多数人使用2,如果你真的很担心,你可以使用3甚至更多。相应地调整集群大小。对于 RF=3,当 3 个节点将数据写入它们在内存中的写入块时,put 返回,该写入块异步刷新到持久层。因此,这取决于您尝试防范的节点故障模式。如果您担心整个集群会立即崩溃,那么您可能会遇到 1 秒(默认)数据丢失的情况。一秒也可以配置得更低。Aerospike 还提供机架感知配置,可在整个机架出现故障时防止数据丢失。放置总是在不同机架中的节点上。最后,Aerospike 提供跨数据中心复制——它是异步的,但确实提供了跨地域复制数据的选项。当然,穿越地理确实有其延迟。最后,如果您完全担心整个集群关闭,您可以在应用程序中连接到两个独立的集群,并始终将更新推送到两个独立的集群。当然,如果应用程序在两次写入之间失败,您现在必须担心一致性。我不知道有谁不得不诉诸那个。