为什么SQLite事务绑定到硬盘旋转?

为什么SQLite事务绑定到硬盘旋转?,sqlite,transactions,Sqlite,Transactions,有: 一个事务通常需要两次完整的磁盘旋转,在7200RPM的磁盘驱动器上,这将限制您每秒大约60个事务 据我所知,硬盘上有一个缓存,磁盘驱动程序中也可能有一个额外的缓存,用于将软件感知到的操作从针对磁盘的实际操作中抽象出来 那么,为什么以及如何将事务严格地绑定到磁盘盘片旋转上呢?因为它通过确保数据实际上写入磁盘而不是保存在内存中来确保数据的完整性。因此,如果电源关闭或其他情况,数据库不会损坏 本视频讲述了原因(例如,因为SQLite实际上用于许多嵌入式设备,这些设备可能会突然断电。) 2.0硬件

有:

一个事务通常需要两次完整的磁盘旋转,在7200RPM的磁盘驱动器上,这将限制您每秒大约60个事务

据我所知,硬盘上有一个缓存,磁盘驱动程序中也可能有一个额外的缓存,用于将软件感知到的操作从针对磁盘的实际操作中抽象出来


那么,为什么以及如何将事务严格地绑定到磁盘盘片旋转上呢?

因为它通过确保数据实际上写入磁盘而不是保存在内存中来确保数据的完整性。因此,如果电源关闭或其他情况,数据库不会损坏

本视频讲述了原因(例如,因为SQLite实际上用于许多嵌入式设备,这些设备可能会突然断电。)

2.0硬件假设 SQLite假定 系统将缓冲写操作,并且 写入请求将在数据之前返回 实际上已经储存在大量的 存储设备。SQLite进一步假设 写操作将是 由操作系统重新排序用于 因此,SQLite执行“刷新”或 关键点的“fsync”操作。 SQLite假定flush或fsync 将不会返回,直到所有挂起 为要删除的文件编写操作 正在刷新已完成。我们正在刷新 告诉我flush和fsync 在某些版本中,基本体被破坏 Windows和Linux的应用程序。这是 不幸。它将SQLite打开到 数据库损坏的可能性 中等功率损耗 犯了罪。然而,什么都没有 SQLite可以用来测试或 补救这种情况。SQLite假设 这就是它的操作系统 在广告宣传的作品上运行。如果 那么,情况并非如此 希望你也不会失去力量 经常


为什么可以保证磁盘控制器将实际执行写操作?但这是关键问题。如果磁盘控制器可以将实际写入延迟一段未知的时间,那么绑定到旋转就没有意义了-程序可以跳过任何数量的旋转,但不会写入磁盘。@Nick D:我想这解释了很多,应该作为一个答案,而不是注释。磁盘制造商并不完全愚蠢,不要无谓地拖延写作。有关更多详细信息,请参阅