Сообщение 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 снять лимит, насколько мне известно, штатными средствами не даст.
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 снять лимит, насколько мне известно, штатными средствами не даст.
A>Итоговая производительность обработки данных аффектится в тех случаях, когда запихивание данных в базу становится узким местом во всей цепочке?
Да, именно так.
A>Значит надо копить данные, складывая в некий быстрой кэш, а по мере его наполнения уже набивать таблицы СУБД данными с этого кэша. Используя при работе с конкретной СУБД тот подход, что даёт наибольшую производительность данной операции.
Я это и попытался сделать: переливание записей не делается напрямую построчно, а сначала пишутся во внутренний буфер, и только по мере его заполнености записи сбрасываются в базу одним оператором. Тупая запись каждой строки без буферизации составляла примерно в два разы больше по общему времени. Поэтому:
A>Параметры в SQL-запросе и количество VALUES в случае INSERT это далеко не одно и тоже. У SQLite может быть сколько угодно записей/строк/кортежей в запросе на вставку, в этом вопросе нет ограничения вида «999 делить на количество столбцов в таблице». Есть другой ограничение — лишь бы текст получившегося INSERT-а был менее двух мегабайт.
Мне всё же упирается в 999 переменных. При попытке превысить лимит бросается исключение. Android снять лимит, насколько мне известно, штатными средствами не даст.