Убедитесь, что таблица аудита не влияет на оперативную память, используемую приложением

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

Давайте представим, что у меня есть небольшое Android-приложение, которое показывает пользователю текущую температуру. Температура меняется каждую секунду, и приложение работает все время.

Также в приложении есть таблица БД "аудит":

CREATE TABLE TemperatureAudit (
secondsFrom1970 INTEGER not null,
temperature INTEGER not null);

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

Поэтому вопрос для тех, кто знает, как работает sqlite на Android: стоит ли беспокоиться?

  1. Будет ли sqlite пытаться загрузить эту большую таблицу в оперативную память, когда я ее не использую? Например, когда я выбираю из другой таблицы.
  2. Будет ли sqlite загружать эту большую таблицу одну часть за другой, если я попытаюсь "выбрать счетчик из TemperatureAudit, где температура> 0"? Или он загрузит всю таблицу в оперативной памяти одним куском?
  3. Что делать, если sqlite не слишком скуп на распределение памяти? Поможет ли перенос этой таблицы в другую базу данных с первой проблемой? Поможет ли разбиение таблицы со вторым?

1 ответ

Решение

SQLite загружает метаданные всех таблиц, но не загружает фактические данные, которые не нужны.

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

Другие вопросы по тегам