Хранение результатов базы данных в локальном хранилище для увеличения времени загрузки? - PullRequest
0 голосов
/ 30 ноября 2018

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

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

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

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

Ответы [ 2 ]

0 голосов
/ 30 ноября 2018

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

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

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

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

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

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

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

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

0 голосов
/ 30 ноября 2018

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...