2

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

注意:这是我之前的问题的跟进

4

4 回答 4

4

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

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

于 2010-08-03T06:40:37.517 回答
1

所有数据库都需要非易失性存储以确保持久性。内存映像不提供持久的存储介质。断电后不久,您的记忆图像就会失效。同样,一旦数据库进程终止,操作系统将释放包含内存中映像的内存。在任何一种情况下,您都会丢失数据库内容。

在将任何更改写入非易失性存储器之前,它们并不是真正持久的。这可能包括将所有数据更改写入磁盘,或者写入正在完成的更改的日志。

在空间或大小关键的情况下,非易失性存储器(例如闪存)可以替代 HDD。但是,据报道闪存在可写入的写入周期数方面存在问题。

在查看了您之前的帖子后,只要您可以保持最后一台服务器运行,多服务器复制就可以工作。一旦它下降,你就会松开你的队列。但是,可以考虑使用 Oracle 的许多替代方案。

PDA 经常使用电池备份内存来存储它们的数据库。一旦电池耗尽,这些数据库就不再耐用。备份很重要。

于 2010-07-27T03:32:06.590 回答
1

In-memory means all the data is stored in memory for it to be accessed. When data is read, it can either be read from the disk or from memory. In case of in-memory databases, it's always retrieved from memory. However, if the server is turned off suddenly, the data will be lost. Hence, in-memory databases are said to lack support for the durability part of ACID. However, many databases implement different techniques to achieve durability. This techniques are listed below.

  • Snapshotting - Record the state of the database at a given moment in time. In case of Redis the data is persisted to the disk after every two seconds for durability.
  • Transaction Logging - Changes to the database are recorded in a journal file, which facilitates automatic recovery.
  • Use of NVRAM usually in the form of static RAM backed up by battery power. In this case data can be recovered after reboot from its last consistent state.
于 2019-04-23T22:38:30.363 回答
0

内存数据库中的经典不能提供经典的持久性,但根据您的要求,您可以:

  • 使用 memcached(或类似的)跨足够多的节点存储在内存中,这样数据不太可能丢失
  • 将您的 oracle 数据库存储在基于 SAN 的文件系统上,您可以为其提供足够的 RAM(例如 3GB)以使整个数据库都在 RAM 中,因此磁盘查找访问永远不会将您的应用程序存储下来。然后,SAN 负责将缓存内容延迟写回磁盘。这是一个非常昂贵的选择,但在需要高性能和高可用性并且他们负担得起的地方很常见。
  • 如果您买不起 SAN,请安装一个 ram 磁盘并在其中安装您的数据库,然后使用 DB 级复制(如 logshipping)来提供故障转移。

有什么理由不想使用持久存储?

于 2010-08-01T16:04:54.713 回答