DynamoDB — сокращение количества запросов

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

Приложение позволяет пользователю запускать определенные оповещения, которые отправляются другим пользователям. Например: «Отгрузка получена, приходите на палубу», «Отгрузка завершена» и т. д.

Это сделанные звонки:

  1. Получить срок действия лицензии на программное обеспечение компании.
  2. Получите местоположение компьютера в здании (например, «Офис A»).
  3. Получите типы предупреждений, которые могут быть вызваны (например, «Отгрузка получена, приходите на палубу», «Отгрузка завершена» и т. Д.).
  4. Получите информацию о пользователе (например, о командах компании, к которым принадлежит пользователь, и уровне администратора, который имеет пользователь (который может быть 0, 1, 2 или 3).

Возможные решения, которые у меня есть, хотя о:

  1. Укажите дату истечения срока действия лицензии компании в качестве атрибута каждого компьютера (это уменьшит количество запросов на 1). Однако, если мне нужно обновить дату истечения срока действия лицензии компании, мне нужно обновить ее для КАЖДОГО ОДНОГО компьютера, который у меня есть в системе, что кажется мне непрактичным, поскольку у меня может быть 200, 300 или, возможно, даже больше компьютеров в базе данных.

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

  3. Кэшировать информацию на устройстве пользователя; тем не менее, я не могу найти хорошую стратегию для сохранения информации, хранящейся локально, как можно более обновленной.

Я все еще думаю, что эти 3 варианта звучат не слишком хорошо, поэтому я надеюсь, что кто-то может указать мне правильное направление. Есть ли хороший способ уменьшить количество звонков? Я получаю информацию о 4 разных объектах (лицензия, компьютер, оповещение, пользователь), должен ли я оставить эти 4 вызова после входа пользователей?


person Rookie    schedule 19.02.2020    source источник


Ответы (1)


Вот несколько вещей, которые можно сделать с каждым компонентом.

  1. Получить информацию о пользователе

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

  2. Местоположение компьютера

    Храните его в распределенном кеше, таком как Redis. лениво инициализировать его. и всякий раз, когда происходит новая запись в местоположение компьютера (редко, IMO), удаляйте запись из Redis, используя потоки Dynamodb и aws lambda.

  3. Вид оповещений

    То же, что и местоположение компьютера

  4. Срок действия лицензии

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

person best wishes    schedule 21.02.2020