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