Информация об изменениях

Сообщение Re[6]: Ускорить вставку в Android SQLite от 24.02.2019 11:12

Изменено 24.02.2019 11:14 halo

Re[6]: Ускорить вставку в Android SQLite
Здравствуйте, a7d3, Вы писали:

A>Итоговая производительность обработки данных аффектится в тех случаях, когда запихивание данных в базу становится узким местом во всей цепочке?


Да, именно так.

A>Значит надо копить данные, складывая в некий быстрой кэш, а по мере его наполнения уже набивать таблицы СУБД данными с этого кэша. Используя при работе с конкретной СУБД тот подход, что даёт наибольшую производительность данной операции.


Я это и попытался сделать: переливание записей не делается напрямую построчно, а сначала пишутся во внутренний буфер, и только по мере его заполнености записи сбрасываются в базу одним оператором. Поэтому:

A>Параметры в SQL-запросе и количество VALUES в случае INSERT это далеко не одно и тоже. У SQLite может быть сколько угодно записей/строк/кортежей в запросе на вставку, в этом вопросе нет ограничения вида «999 делить на количество столбцов в таблице». Есть другой ограничение — лишь бы текст получившегося INSERT-а был менее двух мегабайт.


Мне всё же упирается в 999 переменных. При попытке превысить лимит бросается исключение. Android снять лимит, насколько мне известно, штатными средствами не даст.
Re[6]: Ускорить вставку в Android SQLite
Здравствуйте, a7d3, Вы писали:

A>Итоговая производительность обработки данных аффектится в тех случаях, когда запихивание данных в базу становится узким местом во всей цепочке?


Да, именно так.

A>Значит надо копить данные, складывая в некий быстрой кэш, а по мере его наполнения уже набивать таблицы СУБД данными с этого кэша. Используя при работе с конкретной СУБД тот подход, что даёт наибольшую производительность данной операции.


Я это и попытался сделать: переливание записей не делается напрямую построчно, а сначала пишутся во внутренний буфер, и только по мере его заполнености записи сбрасываются в базу одним оператором. Тупая запись каждой строки без буферизации составляла примерно в два разы больше по общему времени. Поэтому:

A>Параметры в SQL-запросе и количество VALUES в случае INSERT это далеко не одно и тоже. У SQLite может быть сколько угодно записей/строк/кортежей в запросе на вставку, в этом вопросе нет ограничения вида «999 делить на количество столбцов в таблице». Есть другой ограничение — лишь бы текст получившегося INSERT-а был менее двух мегабайт.


Мне всё же упирается в 999 переменных. При попытке превысить лимит бросается исключение. Android снять лимит, насколько мне известно, штатными средствами не даст.