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

时间:2010-07-02 09:30:04

标签: sqlite transactions

a following statement in SQLite FAQ

  

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

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

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

2 个答案:

答案 0 :(得分:2)

来自Atomic Commit In SQLite

  

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实际上在许多嵌入式设备中使用,其中电源可能会突然消失。)