Почему база данных ломается?
Сделал игрового бота для Вконтакте. В течении первого времени все работает как нужно. После минут 20 выходит ошибка, данные в таблицах смешиваются друг с другом или данные в ячейках просто стираются, из-за чего приходится их чистить.
Сначала выключить синхронизацию и запись в журнал, после поставил синхронизацию в NORMAL и FULL режим, ничего не изменилось.
Почему база данных ломается? И почему не сразу а после длительного времени? Может быть это из-за нагрузки?
попробую включить так же запись в журнал, но не думаю что это поможет...
Ответы (1 шт):
Сделай в своем годе две вещи:
- Во первых при начале внесения изменений открывай новую транзакцию, а во вторых в конце изменений закрывай её;
- Переведи всю базу из NORMAL в WAL вот так:
PRAGMA journal_mode=WAL;
И уже после этих изменений проверь работу, и если не поможет, то добавь в свой вопрос хоть какой-то код и журналы/коды ошибок и так далее.
P.S.: SQLite дает возможность работать с базой данных из нескольких потоков/процессов, но необходимо следить за блокировками, то есть если ты делаешь попытку записи, то следи за кодами возврата из функции: запись может пройти безрезультатно, но сама СУБД тебя об этом уведомит кодом ответа, тогда твой процесс должен взять паузу, и попробовать повторить запись позже. SQLite в отличии от Oracle или PostgreSQL не поддерживает версионирование данных, по этому данные всегда хранятся одной версии, и доступ к ним осуществляется поочерёдно и пока кто-то работает с таблицей - она заблокирована. Эта СУБД для небольших систем, а не для промышленных, но для бота она более чем подходит