Данные, записанные в обратный вызов диска - PullRequest
0 голосов
/ 23 октября 2011

Как я могу получить обратные вызовы после того, как данные успешно записаны на диск в Linux?

Я хотел бы, чтобы мой файл базы данных программ отображался в памяти для операций чтения / записи и получал обратные вызовы после успешной записи диска на диск. Вроде как то, что делали старые VMS ..

Ответы [ 2 ]

3 голосов
/ 23 октября 2011

Вам нужно вызвать fdatasync (или fsync, если вам действительно нужны синхронизированные метаданные) и подождать, пока он вернется.

Вы можете сделать это из другого потока, но если один поток записывает в файл, в то время как другой поток выполняет fdatasync (), неясно, какая из записей гарантированно будет постоянной или нет.

Базы данных, которые хотят хранить журналы транзакций гарантированно надежным способом, должны вызвать fdatasync.

Базы данных (такие как innodb) обычно используют прямой ввод-вывод (а также свое собственное кэширование данных, а не полагаются на ОС) в своих основных файлах данных, чтобы они знали, что они будут записаны предсказуемым образом.

1 голос
/ 23 октября 2011

Насколько я знаю, вы не можете получать никаких уведомлений, когда происходит фактическая синхронизация между файлом (или областью mmap ed), даже метки времени файла не изменятся. Однако вы можете принудительно синхронизировать файл (или регион) с помощью fsync.

Также трудно понять причину, почему вы этого хотите. Файл IO должен быть непрозрачным.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...