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