2016-07-07 8 views
0

Я сейчас думаю о написании собственной простой базы данных. Теперь я столкнулся с проблемой, как узнать, что что-то не удалось при следующем запуске моего сервера. Многие высокопроизводительные базы данных NoSQL используют дерево структурированного слияния или аналогичный механизм. Поэтому, если я всегда пишу последнюю транзакцию на диске и i. е. происходит силовое затемнение, откуда я знаю, сколько моих данных было написано, когда я перезапускаю его? Я видел еще один поток на Stackoverflow, которого я, к сожалению, не могу найти в данный момент, когда автор сказал, он считает, что в этом случае всегда есть запас энергии, который гарантирует, что весь блок будет записан. Правильно ли это? Как обращаться с такими ситуациями? Должен ли он быть частью моего асинхронного * nix-API, который я использую для сообщения об ошибке чтения?Простой жесткий диск и SSD гарантируют полный сектор для записи?

ответ

1

Когда вы используете синхронный IO, команда записи не вернется, пока не завершит запись блока/файла на ваш диск. Это может занять некоторое время, но ваше приложение гарантирует, что запись будет завершена и сброшена на диск.

Для лучшей производительности обычно выбран асинхронный IO, который позволяет вашей ОС и аппаратным средствам хранения кэшировать записи для оптимизации производительности ввода-вывода.

Некоторые фон here и here

Когда ваши записи кэшируются где-то в OS/аппаратного обеспечения, необходимо принимать специальные меры, чтобы не потерять их сбоев питания, как this Q&A и this one объяснить.