函数begin_transaction的参数是布尔类型,用于指示应进行何种类型的同步:当值为true时表示物理同步,为false则表示逻辑同步。
当它引用“物理”或“硬”同步时,这是什么意思?
函数begin_transaction的参数是布尔类型,用于指示应进行何种类型的同步:当值为true时表示物理同步,为false则表示逻辑同步。
当它引用“物理”或“硬”同步时,这是什么意思?
我不确定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将把事务推送到文件系统并返回成功,但是如果系统失电等,则更改可能会丢失。