Убедитесь, что таблица аудита не влияет на оперативную память, используемую приложением
Я старался максимально упростить мою ситуацию, чтобы она не выглядела слишком реальной, извините. Но это основано на реальной заботе.
Давайте представим, что у меня есть небольшое Android-приложение, которое показывает пользователю текущую температуру. Температура меняется каждую секунду, и приложение работает все время.
Также в приложении есть таблица БД "аудит":
CREATE TABLE TemperatureAudit (
secondsFrom1970 INTEGER not null,
temperature INTEGER not null);
После года работы этого приложения таблица аудита будет довольно большой. И давайте представим, что я не хочу урезать это, если это не действительно необходимо.
Поэтому вопрос для тех, кто знает, как работает sqlite на Android: стоит ли беспокоиться?
- Будет ли sqlite пытаться загрузить эту большую таблицу в оперативную память, когда я ее не использую? Например, когда я выбираю из другой таблицы.
- Будет ли sqlite загружать эту большую таблицу одну часть за другой, если я попытаюсь "выбрать счетчик из TemperatureAudit, где температура> 0"? Или он загрузит всю таблицу в оперативной памяти одним куском?
- Что делать, если sqlite не слишком скуп на распределение памяти? Поможет ли перенос этой таблицы в другую базу данных с первой проблемой? Поможет ли разбиение таблицы со вторым?
1 ответ
SQLite загружает метаданные всех таблиц, но не загружает фактические данные, которые не нужны.
Все обращения к базе данных осуществляются через страницы размером несколько килобайт; любая страница, которая в данный момент не используется, не обязательно должна быть в памяти. Таким образом, сканирование через таблицу требует очень мало памяти.