Повышение производительности массовых вставок SQLite с помощью Dapper ORM

Я работаю над настольным приложением, которое использует SQLite для массовой вставки десятков тысяч строк в базу данных SQLite. Мне нужна помощь в оптимизации производительности объемной вставки. В настоящее время вставка 60 мегабайт данных в базу данных занимает до 50 секунд.

  • какие параметры строки подключения можно использовать для улучшения представление? Стоит ли менять размер буфера? Возможно ли это через параметр строки подключения? Есть ли другая строка подключения параметры для повышения производительности? Моя текущая строка подключения:

    Data Source = Batch.db; Version = 3; Pooling = True; Max Pool Size = 10; Synchronous = off; FailIfMissing = True; Journal Mode = Off;

  • Я использую Dapper ORM. (построен ребятами из StackOverflow) Есть ли более быстрый способ массовой вставки в Sqlite, в .net?

  • System.Data.Sqlite используется для вставки в SQLite. Как насчет получения специальной скомпилированной версии sqlite, которая улучшает представление? Одна версия SQLite лучше другой? В настоящее время с использованием System.Data.SQLite из http://sqlite.phxsoftware.com

  • В настоящее время я оборачиваю вставки внутри транзакции, чтобы сделать их быстрее (это хорошее улучшение).

  • Я вставляю по одной таблице в 17 таблиц. Могу ли я распараллелить это на разных потоках и сделать это быстрее?

Текущая производительность. Это типично? Могу ли я сделать лучше?

  • 55 000 строк в таблице с 19 столбцами: 2,25 секунды для вставки (24k вставок в секунду)
  • 10 000 строк в таблице с 63 столбцами: 2,74 секунды для вставки (3,7k / sec)

Мне нравится SQLite, но я бы хотел сделать его немного быстрее. В настоящее время сохранение моих объектов в файл XML с использованием сериализации XML происходит быстрее, чем сохранение в базе данных SQLite, поэтому мой босс спрашивает: зачем переходить на SQLite? Или мне следует использовать MongoDB или другую объектную базу данных?

10
задан BrokeMyLegBiking 26 January 2012 в 16:38
поделиться