Я не совсем уверен насчет эквивалентов Java, но:
Логическая синхронизация означает, что любые изменения БД записываются из кеша СУБД в файловую систему.В C вы могли бы сделать это, используя fprintf / fwrite / write / и т. Д.
Физическая синхронизация означает вышеизложенное, с добавленной операцией запроса ОС перенести указанные изменения в постоянное хранилище (жесткий диск, SSD, что угодно), а не хранить их в кеше файловой системы.Это гарантирует, что эти изменения не будут потеряны, если произойдет что-то непредвиденное.В системе Linux / POSIX, которая подразумевает вызов системных вызовов fsync () или fdatasync ().
РЕДАКТИРОВАТЬ:
Очевидно, эквивалентен fsync () в Javais FileDescriptor.sync ():
http://download.oracle.com/javase/1.4.2/docs/api/java/io/FileDescriptor.html#
Дело в том, что для достижения истинной семантики ACID для БД все транзакции должны быть синхронизированы с постоянным носителем данных.В противном случае ваше приложение должно было бы иметь возможность обрабатывать транзакции, которые не выполнялись молча - СУБД передавала транзакции в файловую систему и успешно возвращалась, но тогда изменения могли бы быть потеряны, если, например, система потеряла питание.
Проблема с физической синхронизацией заключается в том, что она может оказать существенное влияние на производительность.Жесткие диски могут обрабатывать ограниченное количество транзакций в секунду (при этом SSD работают на лот быстрее), поэтому первое, что нужно сделать для повышения производительности БД, - это объединить вставки в более крупные транзакции.