1

我正在阅读http://www.h2database.com/html/advanced.html#durability_problems我发现

一些数据库声称它们可以保证持久性,但这种说法是错误的。针对 H2、HSQLDB、PostgreSQL 和 Derby 运行了持久性测试。所有这些数据库有时都会丢失已提交的事务。该测试包含在 H2 下载中,请参阅 org.h2.test.poweroff.Test

它还说

如果不能接受丢失交易,则应使用笔记本电脑或 UPS(不间断电源)。

那么是否有任何数据库是持久的。该文件说 fsync() 命令和大多数硬盘驱动器不服从 fsync()。它还谈到没有可靠的方法来刷新硬盘驱动器缓冲区

那么,是否有一段时间,承诺的交易会变得持久,所以我们可以购买提供最少那么多备用电源的 ups。

还有一种方法可以知道提交的事务是持久的。假设我们不购买 ups,并且在知道交易是持久的之后,我们可以显示成功消息。

4

1 回答 1

1

问题取决于您是否可以指示 HDD/SDD 将事务提交到持久媒体。如果大容量存储设备没有刷新到耐用介质的功能,那么在它上面的任何数据存储系统都不能说是真正耐用的。

然而,有很多内置 UPS 的 NAS 设备,这些似乎符合耐用媒体的要求——如果单独服务器上的数据库将数据提交到该设备并执行检查点,那么提交将刷新到媒体。只要媒体在停电中幸存下来,那么您就可以说它是耐用的。NAS 上的 UPS 应该能够向其关联的磁盘组发出受控关闭,以保证其持久性。

或者,您可以使用 SQL Azure 之类的东西,它将提交写入不同服务器上的多个 (3) 单独的数据库存储实例。尽管我们不知道这些写入是否会到达永久存储介质,但这实际上并不重要——持久性的衡量标准是读取可重复性;这似乎符合该要求。

于 2017-07-12T20:42:10.543 回答