Подтвердить что ты не робот

Что такое "физическая синхронизация" базы данных Киотского кабинета?

Функция begin_transaction принимает логический аргумент, указывающий, какой тип синхронизации должен быть выполнен; физическое, если true или логическое значение false.

Что это значит, когда речь идет о "физической" или жесткой синхронизации?

4b9b3361

Ответ 1

Я не совсем уверен в Java-эквивалентах, но:

  • Логическая синхронизация означает, что любые изменения БД записываются из кэша СУБД в файловую систему. В C вы сделали бы это, используя fprintf/fwrite/write/etc.

  • Физическая синхронизация означает вышеупомянутое, с добавленной операцией просить ОС нажимать указанные изменения на постоянное хранилище (жесткий диск, SSD, независимо), а не хранить их в кеше файловой системы. Это гарантирует, что эти изменения не будут потеряны, если что-нибудь случится. В системе Linux/POSIX, которая подразумевает вызов системных вызовов fsync() или fdatasync().

EDIT:

По-видимому, эквивалент fsync() в Java - FileDescriptor.sync():

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

Дело в том, что для достижения истинной семантики ACID для БД все транзакции должны быть синхронизированы с постоянным носителем. В противном случае ваше приложение должно было бы иметь дело с транзакциями, которые не выполнялись без ошибок - СУБД будет переводить транзакции в файловую систему и успешно возвращаться, но тогда изменения могут потеряться, если, например, система потеряла мощность.

Проблема с физической синхронизацией заключается в том, что она может существенно повлиять на производительность. Жесткие диски могут обрабатывать ограниченное количество транзакций в секунду (SSD намного быстрее при этом), поэтому первое, что нужно сделать для повышения производительности БД, - это объединить вставки в больших транзакциях.