Лучшая практика для одновременного хранения данных в памяти и базе данных на Android

Мы разрабатываем приложение для Android, которое содержит много данных («клиенты», «продукты», «заказы» ...), и мы не хотим запрашивать SQLite каждый раз, когда нам нужна запись. Мы хотим избегать запросов к базе данных как можно чаще, поэтому мы решили хранить определенные данные всегда в памяти.

Наша первоначальная идея - создать два простых класса:

«MemoryRecord»: класс, который будет содержать в основном массив объектов (string, int, double, datetime и т. Д.), Которые представляют собой данные из записи таблицы, и все методы для получения этих данных из этого массив.

«MemoryTable»: класс, который будет содержать в основном карту [Key, MemoryRecord] и все методы для манипулирования этой картой и вставки / обновления / удаления записи в / из базы данных.

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

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

Но нам нужна помощь / совет от вас. Можете ли вы предложить что-то более простое или эффективное для реализации такой вещи? Или, может быть, некоторые существующие классы, которые уже делают это для нас?

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

Но, скажем, у нас есть таблица с 2000 записями, и мне нужно будет перечислить эти записи. Для каждой из них мне нужно запросить другие 30 таблиц (некоторые из них с 1000 записями, другие с 10 записями), чтобы добавить дополнительную информацию в список, и это пока «летит» (и, как вы знаете, мы должны быть очень быстрыми) в этот момент).

Теперь вы будете говорить: «просто создайте свой основной запрос со всеми этими« объединениями »и соберите все, что вам нужно, за один шаг. SQLite может быть очень быстрым, если ваша база данных хорошо спроектирована и т. Д…».

Хорошо, но этот запрос станет очень сложным и уверенным, даже если SQLite очень быстрый, он будет «слишком» медленным (2-4 секунды, как я подтвердил, и это неприемлемое время для нас).

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

Таким образом, альтернативой является вывод только основных записей (это никогда не изменится, независимо от того, что пользователь делает или хочет) без объединения (это очень быстро!) И запрос других таблиц каждый раз, когда нам нужны данные. Обратите внимание, что на таблице только с 10 записями мы будем получать одни и те же записи много и много раз. В этом случае это пустая трата времени, потому что, независимо от того, насколько быстрым является SQLite, запрос, указание, выборка и т. Д. Всегда будет дороже, чем просто захват записи из своего рода «кеша памяти». Я хочу пояснить, что мы не планируем всегда хранить все данные в памяти, только некоторые таблицы, которые мы запрашиваем очень часто.

И мы подошли к первоначальному вопросу: как лучше всего «кэшировать» эти записи? Мне действительно нравится фокусировать дискуссию на этом, а не на том, «зачем вам нужно кэшировать данные?»

Ответы на вопрос(2)

Ваш ответ на вопрос