database - 内存数据库如何提供持久性?

标签 database in-memory-database durability

更具体地说,是否有任何数据库不需要辅助存储(例如 HDD)来提供持久性?

注意:这是一个 follow up of my earlier question .

最佳答案

如果您希望事务持久化,写入持久存储只是真正的选择(您可能不想在独立的数据中心中构建许多具有独立电源的集群,并且仍然祈祷它们永远不会同时失败)。另一方面,这取决于您的数据的值(value)。如果它是可有可无的,那么具有足够复制的纯内存数据库可能是合适的。顺便说一句,即使硬盘在您存储数据后也可能会出现故障,所以这里不是理想的解决方案。您可以看看http://www.julianbrowne.com/article/viewer/brewers-cap-theorem选择复制权衡。

普威勒 http://prevayler.org/是一个使用持久存储备份的内存系统的示例(顺便说一句,代码非常简单)。持久性是通过保存在适当设备(例如 HDD 或 SSD)上的事务日志提供的。每个修改数据的事务都会写入日志,日志用于在断电或数据库/系统重启后恢复数据库状态。除了 Prevayler 之外,我还看到过类似的方案用于持久化消息队列。 这确实类似于“经典”RDBMS 的工作方式,只不过日志只是写入底层存储的数据。日志也可用于复制,因此您可以将一份日志副本发送到实时副本,另一份发送到 HDD。当然,各种组合都是可能的。

关于database - 内存数据库如何提供持久性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3340484/

相关文章:

nosql - 我应该使用哪个键值数据库?

数据库持久性与性能

database - 如何执行 YB 的 k8s/helm 设置?

android - 检查 Android SQLite 数据库中的特定列

database - Aerospike 错误 : (9) Client timeout: timeout=1000 iterations=1 failedNodes=0 failedConns=0

java - "ids for this class must be manually assigned before calling save()"带有字符串 ID

mongodb - 如何在单机上使用 MongoDB 避免服务器故障时的数据丢失?

java - 在 ActiveMQ 中使用带有虚拟主题的持久订阅者,订阅恢复策略是否发挥作用?

Cassandra where IN 子句限制

sql - Oracle:检查其他表中是否存在行