Что такое "физическая синхронизация" базы данных Киотского кабинета?
Функция begin_transaction принимает логический аргумент, указывающий, какой тип синхронизации должен быть выполнен; физическое, если true или логическое значение false.
Что это значит, когда речь идет о "физической" или жесткой синхронизации?
Ответ 1
Я не совсем уверен в Java-эквивалентах, но:
Логическая синхронизация означает, что любые изменения БД записываются из кэша СУБД в файловую систему. В C вы сделали бы это, используя fprintf/fwrite/write/etc.
Физическая синхронизация означает вышеупомянутое, с добавленной операцией просить ОС нажимать указанные изменения на постоянное хранилище (жесткий диск, SSD, независимо), а не хранить их в кеше файловой системы. Это гарантирует, что эти изменения не будут потеряны, если что-нибудь случится. В системе Linux/POSIX, которая подразумевает вызов системных вызовов fsync() или fdatasync().
EDIT:
По-видимому, эквивалент fsync() в Java - FileDescriptor.sync():
Дело в том, что для достижения истинной семантики ACID для БД все транзакции должны быть синхронизированы с постоянным носителем. В противном случае ваше приложение должно было бы иметь дело с транзакциями, которые не выполнялись без ошибок - СУБД будет переводить транзакции в файловую систему и успешно возвращаться, но тогда изменения могут потеряться, если, например, система потеряла мощность.
Проблема с физической синхронизацией заключается в том, что она может существенно повлиять на производительность. Жесткие диски могут обрабатывать ограниченное количество транзакций в секунду (SSD намного быстрее при этом), поэтому первое, что нужно сделать для повышения производительности БД, - это объединить вставки в больших транзакциях.