Мы разрабатываем приложение для Android, которое содержит много данных («клиенты», «продукты», «заказы» ...), и мы не хотим запрашивать SQLite каждый раз, когда нам нужна запись. Мы хотим избегать запросов к базе данных как можно чаще, поэтому мы решили хранить определенные данные всегда в памяти.
Наша первоначальная идея - создать два простых класса:
«MemoryRecord»: класс, который будет содержать в основном массив объектов (string, int, double, datetime и т. Д.), Которые представляют собой данные из записи таблицы, и все методы для их получения. данные в / из этого массива.
«MemoryTable»: класс, который будет содержать в основном карту [Key, MemoryRecord] и все методы для манипулирования этой картой и вставки / обновления / удаления записи в / из базы данных.
Эти классы будут получены для всех типов таблиц, которые мы имеем в базе данных. Конечно, есть и другие полезные методы, не перечисленные выше, но они не важны на данный момент.
Итак, при запуске приложения мы загружаем эти таблицы из базы данных SQLite в память, используя эти классы, и каждый раз, когда нам нужно изменить некоторые данные, мы изменяем их в памяти и сразу после этого отправляем в базу данных.
Но нам нужна помощь / совет от вас. Можете ли вы предложить что-то более простое или эффективное для реализации такой вещи? Или, может быть, некоторые существующие классы, которые уже делают это для нас?
Я понимаю, что вы, ребята, пытаетесь мне показать, и я благодарю вас за это.
Но, скажем, у нас есть таблица с 2000 записями, и мне нужно будет перечислить эти записи. Для каждой из них мне нужно запросить другие 30 таблиц (некоторые из них с 1000 записями, другие с 10 записями), чтобы добавить дополнительную информацию в список, и это пока «летит» (и, как вы знаете, мы должны быть очень быстрыми) в этот момент).
Теперь вы скажете: «Просто создайте свой основной запрос со всеми этими« объединениями »и соберите все, что вам нужно, за один шаг. SQLite может быть очень быстрым, если ваша база данных хорошо спроектирована и т. Д.». "..
Хорошо, но этот запрос станет очень сложным и надежным, хотя SQLite очень быстрый, он будет «слишком» медленным (2-4 секунды, как я подтвердил, и это не приемлемое время для нас) .
Еще одним осложнением является то, что, в зависимости от взаимодействия с пользователем, нам необходимо «повторно запросить» все записи, поскольку используемые таблицы не совпадают, и нам нужно «повторно объединить» с другим набором таблиц.
Таким образом, альтернатива - принести только основные записи (это никогда не изменится, независимо от того, что пользователь делает или хочет) без объединения (это очень быстро!) И запрашивать другие таблицы каждый раз, когда нам нужны данные. Обратите внимание, что на таблице только с 10 записями мы будем получать одни и те же записи много и много раз. В этом случае это пустая трата времени, потому что, независимо от того, насколько быстрым является SQLite, запрос, указание, выборка и т. Д. Всегда будет дороже, чем просто захват записи из своего рода «кеша памяти». Я хочу пояснить, что мы не планируем всегда хранить все данные в памяти, только некоторые таблицы, которые мы запрашиваем очень часто.
И мы подошли к первоначальному вопросу: как лучше всего «кэшировать» эти записи? Мне действительно нравится концентрировать внимание на этом, а не на том, «зачем вам нужно кэшировать данные?»