Вопрос: Когда происходит фактическая запись в файл sqlite3 db и что происходит, если он прерывается?
информация:
У меня есть эта программа на python, над которой я работал в течение нескольких недель, которая использует sqlite3 для хранения больших объемов данных из имитационного моделирования. Но есть две ситуации, о которых я беспокоюсь.
У нас было много гроз в последнее время, и это несколько раз выбило власть, также я обновляю файл, который пишет на db с некоторой частотой, и для этого мне нужно убить текущий запуск нить моделирования. в обоих случаях, особенно в первом, я беспокоюсь о том, что происходит, когда этот поток прерывается. что, если я случайно прерву его или потеряю власть, когда он пишет из файла журнала в db? будет ли информация просто не попасть туда? он будет там, но коррумпирован? это повредит весь файл sqlite3 db?
В основном я хочу знать, когда данные фактически получаются в файл, а не только файл журнала. и если этот процесс записи не заканчивается по какой-либо причине, что происходит с журналом и файлом db?
~ п
SQLite использует атомный коммит, поэтому либо все, либо ничего не зафиксировано.
Если вы обеспокоены тем, что база данных оставлена в недопустимом состоянии, вам нужно убедиться, что вы завершаете все "переходное" состояние в BEGIN TRANSACTION ... COMMIT
.
Подробные сведения о записи в файлы журнала и т.д. (в том числе через сбои) содержатся в документе "Блокировка файлов и Concurrency в версии SQLite 3" .