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

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

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

1 ответ

Решение

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

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

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

РЕДАКТИРОВАТЬ:

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

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

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

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

Другие вопросы по тегам