Сколько операций вставки можно выполнить за одну транзакцию в SQLite? - PullRequest
11 голосов
/ 26 августа 2011

Я пытаюсь вставить большое количество записей (в миллионах) в базу данных SQLite. Данные считываются из файлового потока (C ++). Если я начинаю одну транзакцию, выполняю все вставок и затем фиксирую транзакцию, я получаю лишь очень небольшой процент фактически вставленных в мою базу данных записей.

То, что вставлено, кажется случайным - я не вижу ни одного шаблона, для которого вставляются, а какие исключаются. Однако, если я фиксирую, а затем снова запускаю транзакцию после 2000 вставок, у меня нет этой проблемы, и все записи вставляются, даже если процесс на намного медленнее. Итак ...

Существует ли строгое ограничение на количество операций вставки за одну транзакцию? Есть ли способ изменить это ограничение?

1 Ответ

14 голосов
/ 26 августа 2011

Я могу без проблем вставить 10 миллионов строк в одну транзакцию.

Мои догадки:

  • вы вставляете слишком много строк в одном операторе и нажимаете МаксимумПредел глубины дерева выражений.Это можно полностью отключить.
  • вы используете слишком длинные INSERT без значений привязки и превышаете ограничение максимальной длины оператора SQL.В этом случае используйте привязку параметров.
  • это может быть ошибка в библиотеке (проверяете ли вы каждое API-возвращение на наличие кодов ошибок?)

Проверка Ограничения в SQLite.Может помочь, если вы покажете, как вы готовите и выполняете INSERT в коде.

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