суббота, 19 ноября 2011 г.

Быстрая загрузка данных в Sqlite

Sqlite замечательная локальная база данных. Не требует установки, легко встраивается в приложения благодаря API. Шустрая благодаря тому, что данные не гоняются ни по сети, ни даже между процессами. У меня загрузка листа в миллион записей в Sqlite занимает порядка 30 секунд. Для сравнения - та же самая процедура загружает те же данные в локальный MySQL в 10 раз дольше.
Однако, для того, чтобы загрузка данных в Sqlite происходила с максимально возможной скоростью нужно использовать две вещи:

1. Параметризованный Sql, типа такого: INSERT INTO `table1` (`A`, `B`) VALUES (:param1, :param2). В начале процедуры загрузки выполнять "prepare" (Sqlite3_Prepare_v2). Перед вставкой "биндить" переменные с помощью sqlite3_bind_text, sqlite3_bind_int64 и т.п.,
а затем выполнять вставку вызовом функции sqlite3_step.

2. Транзакции: вставлять данные большими порциями, например, по 1000 записей. Перед вставкой очередной порции выполнять BEGIN TRANSACTION. В конце вставки - COMMIT TRANSACTION. Если этого не делать, то после каждой операции вставки данные будут немедленно сбрасываться на диск, что замедлит процесс во много раз.

===
Перепечатка материалов блога разрешается с обязательной ссылкой на blog.coolsoftware.ru

1 комментарий:

  1. Не понятно. Как это реализуется в C#. там нет таких команд как prepare, sqlite3_bind_text и тд.

    ОтветитьУдалить