我正在阅读 http://www.h2database.com/html/advanced.html#durability_problems,我发现
一些数据库声称它们可以保证持久性,但这种说法是错误的。对H2,HSQLDB,PostgreSQL和Derby进行了耐久性测试。所有这些数据库有时会丢失已提交的事务。该测试包含在 H2 下载中,请参阅 org.h2.test.poweroff.test
还说
如果无法接受丢失交易,则应使用笔记本电脑或UPS(不间断电源(。
那么有没有持久的数据库。该文档介绍了 fsync(( 命令,大多数硬盘驱动器不服从 fsync((。它还谈到了没有可靠的方法来刷新硬盘驱动器缓冲区
那么,有没有一段时间之后,承诺的交易变得持久,所以我们可以购买提供最少的电力供应备份的UPS。
还有没有办法知道提交的事务是持久的。假设我们不购买UPS,并且在知道交易持久之后,我们可以显示成功信息。
问题取决于您是否可以指示 HDD/SDD 将事务提交到持久介质。如果大容量存储设备没有刷新到持久介质的功能,那么它上面的数据存储系统就不能说是真正耐用的。
然而,有很多内置 UPS 的 NAS 设备似乎符合持久介质的要求 - 如果单独服务器上的数据库将数据提交到该设备并执行检查点,则提交将刷新到介质。只要媒体在停电中幸存下来,那么您可以说它经久耐用。NAS 上的 UPS 应能够对其关联的磁盘包发出受控关闭,从而保证持久性。
或者,您可以使用类似于SQL Azure的东西,它将提交写入到不同服务器上的多(3(个单独的数据库存储实例。虽然我们不知道这些写入是否到达永久存储介质,但这实际上并不重要 - 持久性的衡量标准是读取可重复性;这似乎符合这一要求。