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

什么是京都内阁数据库的“物理同步”?

  •  11
  • Felipe  · 技术社区  · 14 年前

    功能 begin_transaction 接受一个布尔参数,该参数指示应执行哪种类型的同步;为真时为物理同步,为假时为逻辑同步。

    当它指的是“物理”或“硬”同步是什么意思?

    1 回复  |  直到 13 年前
        1
  •  8
  •   thkala jaxb    14 年前

    我不太确定Java的等价物,但是:

    • 逻辑同步意味着任何数据库更改都将从DBMS缓存写入文件系统。在C语言中,您可以使用fprintf/fwrite/write/etc来实现这一点。

    • 物理同步指的是上述操作,附加的操作是要求操作系统将所述更改推送到永久存储(硬盘驱动器、SSD等)中,而不是将其保存在文件系统缓存中。这确保了如果发生任何不好的事情,这些变化不会丢失。在Linux/POSIX系统上,这意味着调用fsync()或fdatasync()系统调用。

    编辑:

    显然,Java中的fsync()等价于FileDescriptor.sync():

    http://download.oracle.com/javase/1.4.2/docs/api/java/io/FileDescriptor.html#

    关键是,要实现数据库的真正ACID语义,所有事务都应该同步到永久存储介质。否则,您的应用程序必须能够处理无提示地失败的事务—DBMS将事务推送到文件系统并成功返回,但如果系统断电,则更改可能会丢失。

    物理同步的问题是它会对性能产生重大影响。硬盘每秒可以处理有限数量的事务(ssd是 许多 这就是为什么要提高数据库性能的第一件事是将插入绑定到更大的事务中。