Самый быстрый способ хранения значений в базе данных Android SQLite? - PullRequest
2 голосов
/ 03 апреля 2012

Мне нужно хранить одновременные показания с 10 датчиков в базе данных SQLite на частоте около 100 Гц.Это означает, что мне нужно хранить около 1000 чтений в секунду в базе данных.

Я пытался поместить метод вставки базы данных в службу, работающую в своем собственном процессе, но я могу собирать только данные за 3,5 секунды.Я думаю, что служба убита в этот момент.

Я не использую транзакции базы данных для вставки данных.Только отдельные вызовы INSERT INTO ... Важно ли использовать транзакции?

Необходимо ли запускать вставки базы данных в отдельном процессе?Могу ли я просто запустить их в новом потоке вне основного процесса?

Я могу предоставить код, если это необходимо.

Ответы [ 2 ]

4 голосов
/ 03 апреля 2012

Вам необходимо использовать транзакции и «группировать» свои запросы, выполняя несколько вставок в одной транзакции. Вам нужно будет поиграть с количеством вставок, но я бы начал с 1000 вставок на транзакцию и откорректировал его оттуда.

Транзакции выполняются очень медленно, если вы хотите вставить одну запись за раз. Причина этого заключается в том, что SQLite ожидает записи данных на диск, прежде чем завершить транзакцию, и поэтому ему приходится ждать, пока дисковые пластины полностью развернутся, в течение которого диск практически неактивен.

На жестком диске со скоростью 7200 об / мин это существенно ограничивает число транзакций до 60 в секунду.

http://www.sqlite.org/faq.html#q19

0 голосов
/ 03 апреля 2012

Мне нужно хранить одновременные показания с 10 датчиков в базе данных SQLite на частоте 100 Гц

Если вы имеете в виду датчики Android, я не уверен, что вы на самом деле получите данные, доставленные вамэто быстро.

Я пытался поместить метод вставки базы данных в службу, работающую в своем собственном процессе

Не использовать отдельный процесс.Вы добавляете накладные расходы без какой-либо выгоды.

Выполняйте ввод-вывод в базу данных с любого компонента, зарегистрированного вашими датчиками.Если это услуга, хорошо.

Я могу собирать данные только за 3,5 секунды.Я думаю, что в этот момент Службу убивают.

Тогда у вас большие проблемы.Процессы, содержащие запущенные сервисы, не будут уничтожены через 3,5 секунды после запуска.Так или иначе, ваша реализация сервиса испорчена.

Я не использую транзакции базы данных для вставки данных

Как указывает г-н Харви, транзакции важны для производительности.

Важно ли использовать транзакции?

Да.

Необходимо ли запускать вставки базы данных в отдельном процессе?

Мало того, что это не нужно, оно граничит с нелепым.

Можно ли просто запустить их в новом потоке вне основного процесса?

Да.

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