我正在阅读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) 独立数据库存储实例。尽管我们不知道这些写入是否曾经到达永久存储介质,但这实际上并不重要——持久性的衡量标准是读取可重复性;这似乎满足了这个要求。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句