Запись на диск в единицах «страницы» - PullRequest
0 голосов
/ 21 июня 2011

Недавно я читал системы управления базами данных (Рагху Рамакришнан и Йоханнес Геркке). В нем говорится, что диспетчер дискового пространства отвечает за операции выделения / освобождения / чтения / записи в единицах страницы, чтобы обеспечить максимальное количество операций с данными в одной главе чтения / записи, чтобы минимизировать время. Теперь для выполнения, скажем, функции, записи одной страницы на диск я могу сделать следующее: -

1 - записать n байтов данных в буфер в памяти, где n - размер страницы

2-Записать этот буфер в файл, используя простые операции ввода-вывода в C ++ (ofstream).

Мой вопрос заключается в том, будут ли эти n байтов успешно записаны в виде одной страницы на диске, или будут другие искажения при использовании этого процесса, который предотвращает запись буфера на диск в виде одной страницы данных, несмотря на его размер быть равным размеру страницы. В случае, если он не будет записан как одна страница, какой метод я должен принять? Большое спасибо!

1 Ответ

0 голосов
/ 04 июля 2011

Обычно системы баз данных используют прямой ввод / вывод для сохранения страницы в памяти на диске.Системы баз данных могут контролировать, оценивать и оптимизировать запись на диск с помощью прямого ввода-вывода, который не буферизируется ОС или буферизованными библиотеками.

Системный вызов ОС можно ссылаться по следующим ссылкам:

  1. UNIX-Like: open (2) : проверьте флаг O_DIRECT
  2. Windows: CreateFile : проверьте FILE_FLAG_WRITE_THROUGH

Даже если буферизованные библиотеки ввода-вывода имеют метод flush () , операционные системы не гарантируют, что данные будут сохраняться на диске в правильном направлении, когда flush () получитназывается.

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