"物理同步"是什么意思?京都数据库

11

函数begin_transaction的参数是布尔类型,用于指示应进行何种类型的同步:当值为true时表示物理同步,为false则表示逻辑同步。

当它引用“物理”或“硬”同步时,这是什么意思?

1个回答

8

我不确定Java的等效方法,但:

  • 逻辑同步意味着将任何数据库更改从DBMS高速缓存写入文件系统。在C中,您可以使用fprintf / fwrite / write等来完成此操作。

  • 物理同步意味着以上操作,并添加了一个操作,即请求操作系统将这些更改推送到永久存储(硬盘,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速度要快得多),因此改善数据库性能的第一件事是将插入操作捆绑在更大的事务中。

1
可以有人为这个问题添加“kyotocabinet”标签吗?我没有1.500创建新标签。谢谢! - Felipe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接