Хранение результатов базы данных в локальном хранилище для увеличения времени загрузки?

У меня есть вопрос о дизайне базы данных. Я создаю приложение, которое собирает данные из базы данных об определенных ориентирах рядом с пользователем. Приложение имеет очень высокий уровень лояльности, поэтому одни и те же пользователи часто возвращаются и часто запрашивают в базе данных одни и те же элементы.

Элементы в базе данных не изменятся - все они являются географическими объектами и, как таковые, данные не изменятся. В настоящее время для базы данных мы используем Firebase, которая, несмотря на все ее преимущества, кажется достаточно дорогой для количества запросов, которые мы получаем. Мы ищем способы уменьшить нагрузку на запросы к базе данных.

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

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

2 ответа

Добавление результатов запроса в локальное хранилище не очень хорошая идея:

1- Локальное хранилище для некоторых ограниченных целей

2- Локальное хранилище поддерживается не всеми браузерами (даже не всеми версиями)

3- Локальное хранилище ограничено 5 МБ во всех основных браузерах

Удаление нагрузки на БД путем добавления данных в локальное хранилище не очень хорошая идея. Есть и другое решение для этого. Вы можете добавить базу данных без SQL, которая намного быстрее между вашим приложением и реляционной БД. Вы можете использовать кеширование в своем приложении на стороне сервера и вместо извлечения данных из БД вы можете извлекать их из памяти.

Если вы выбираете кеш, то вам нужно выбрать правильную стратегию с точки зрения аннулирования и выбора правильного кеша:

правильный кеш: в кеше памяти (кучной памяти) выберите этот, если у вас есть только один сервер в каждом регионе. Распределенный кеш (в памяти на другом сервере, например AWS Memcached или Redis) и т. д.

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

Вы не сказали, используете ли вы Realtime Database или Firestore, но клиентские SDK для обеих этих баз данных автоматически кэшируют и сохраняют данные в локальном хранилище, которое считывается из базы данных. Локальный кеш будет использоваться, когда данные не изменились на сервере, и вы не будете платить за операции чтения при использовании кэшированных данных. На самом деле вам не нужно добавлять свой собственный локальный кеш, если только вам не нужно что-то делать с этими данными, что не может быть сделано клиентским SDK.

Это все задокументировано. Например, для Android используется база данных в реальном времени. И для клиентов Firestore.

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