有a following statement in SQLite FAQ:
事务通常需要两次完整的磁盘盘旋转,这在7200RPM磁盘驱动器上限制您每秒约60次事务。
据我所知,硬盘上有一个缓存,磁盘驱动程序中可能还有一个额外的缓存,用于抽象软件从磁盘盘片的实际操作中感知到的操作。
那么为什么以及如何将事务严格地绑定到磁盘盘片旋转?
答案 0 :(得分:2)
2.0硬件假设
SQLite假设正在运行 系统将缓冲写入和a 写请求将在数据之前返回 实际上已存放在群众中 储存设备。 SQLite进一步假设 写操作将是 由操作系统重新排序。 :用于 这个原因,SQLite做了“冲洗”或 关键点的“fsync”操作。 SQLite假定flush或fsync 在所有未决之前都不会返回 写文件的操作 被冲洗已经完成。我们是 告诉那个flush和fsync 某些版本的原语被破坏了 Windows和Linux。这是 不幸的。它打开SQLite直到 数据库损坏的可能性 在中间断电之后 提交。但是,没有什么 SQLite可以做的测试或 纠正这种情况。 SQLite假设 它是操作系统 按照宣传的方式运行。如果 当时情况并非如此,那么 希望你也不会失去力量 常。
答案 1 :(得分:1)
因为它确保数据实际写入磁盘而不是保存在内存中,从而确保数据完整性。因此,如果电源关闭或某事,数据库不会被破坏。
此视频http://www.youtube.com/watch?v=f428dSRkTs4讨论了原因(例如,因为SQLite实际上在许多嵌入式设备中使用,其中电源可能会突然消失。)