代码之家  ›  专栏  ›  技术社区  ›  sharptooth

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

  •  4
  • sharptooth  · 技术社区  · 14 年前

    a following statement in SQLite FAQ :

    一个事务通常需要两次完整的磁盘盘旋,7200rpm磁盘驱动器上的盘旋限制为每秒60个事务。

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

    那么,为什么事务会如此严格地绑定到磁盘盘片旋转上呢?

    2 回复  |  直到 14 年前
        1
  •  2
  •   Nick Dandoulakis    14 年前

    Atomic Commit In SQLite

    2.0硬件假设

    sqlite假设 系统将缓冲写操作, 写入请求将在数据之前返回 实际上已经大量储存 存储设备。sqlite进一步假设 写操作将是 按操作系统重新排序。 为了 因此,sqlite执行“flush”或 关键点的“fsync”操作。 sqlite假设flush或fsync 在所有挂起之前不会返回 文件的写入操作 正在刷新已完成。 我们是 告诉我,冲和fsync 有些版本的原语被破坏了 Windows和Linux的。这是 不幸的是。它将sqlite打开到 数据库损坏的可能性 中间断电后 一个承诺。但是,没有什么 sqlite可以用来测试 纠正这种情况。sqlite假设 它的操作系统 按广告宣传的方式进行。如果 不是这样的,好吧 希望你不会也失去力量 经常。

        2
  •  1
  •   user181548    14 年前

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

    这个视频 http://www.youtube.com/watch?v=f428dSRkTs4 讨论原因(例如,因为sqlite实际上用于很多可能突然断电的嵌入式设备中)。