Что такое «физическая синхронизация» базы данных кабинета Киото? - PullRequest
11 голосов
/ 29 ноября 2010

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

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

1 Ответ

8 голосов
/ 29 ноября 2010

Я не совсем уверен насчет эквивалентов 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 работают на лот быстрее), поэтому первое, что нужно сделать для повышения производительности БД, - это объединить вставки в более крупные транзакции.

...