Кеширование

Кэширование - важный элемент высокопроизводительной базы данных. AWS предоставляет широкий спектр решений для кеширования для своих сервисов и сред. Для DynamoDB наиболее предпочтительными вариантами являются ElasticCache и Amazon DynamoDB Accelerator (DAX).

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

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

Кроме того, ElasticCache может быть промежуточным звеном между клиентами и различными сервисами, такими как Amazon RDS, S3 и даже MongoDB. DAX, с другой стороны, специально оптимизирован для DynamoDB.

Когда сервер выполняет запрос, он сначала обращается к DAX. Затем DAX проверяет, есть ли результаты запроса в кеше. Если да, то данные будут возвращены немедленно. В противном случае он отправит запрос в базу данных. А вот и самое приятное: данные будут синхронизироваться из DynamoDB в DAX. Более того, вся эта синхронизация и управление DAX обеспечивается и выполняется AWS.

Стратегии кеширования

Существует два распространенных типа стратегий кэширования, которые можно использовать при использовании решений для кэширования, таких как ElasticCache: отложенная загрузка и сквозная запись. Когда использовать то, что действительно зависит от данных и схемы доступа к ним. Однако сначала важно понять их разницу.

Ленивая загрузка

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

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

  • Попадание в кеш: когда запрошенные данные уже хранятся в кеше. ElasticCache мгновенно вернет данные.
  • Отсутствие кеша: это происходит с отложенной загрузкой в ​​начальных запросах, когда данные не были сохранены в кеш. Запрос будет отправлен в базу данных. После этого сервер обновит кэш результатами, на которые ответила база данных.

Сквозная запись

В этом решении приложение записывает в кеш сразу после обновления базы данных. Этот процесс повторяется в каждом запросе.

Плюсы и минусы

Обе стратегии приносят приятные преимущества наряду с компромиссами в определенных аспектах.

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

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

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

Dynamo TTL - Время жить

Dynamo TTL - это атрибут, который определяет, когда элементы в таблице будут удалены. Для управления TTL вам необходимо указать его в формате Unix time для атрибута.

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

TL;DR

  • Кэширование помогает повысить производительность баз данных приложений с интенсивным чтением.
  • Чтобы реализовать кеширование в DynamoDB, мы могли бы использовать ElasticCache и DAX. ElasticCache может быть входной дверью для других служб баз данных, в то время как DAX специально разработан для DynamoDB.
  • Есть 2 типа стратегий кэширования: отложенная загрузка и сквозная запись. Ленивая загрузка загружает в кеш только те данные, которые запрашивает приложение, в то время как сквозная запись синхронизирует кеш с базой данных в каждом запросе.
  • Время жизни (TTL) - это атрибут в таблице DynamoDB. Он решает, когда удалить ненужные данные в таблице. Этот процесс выполняется DynamoDB в фоновом режиме.

Ресурсы

Стратегии кэширования - Amazon ElastiCache Стратегия кэширования с DynamoDB Streams, AWS Lambda и ElastiCache Amazon DynamoDB Accelerator (DAX): кэш сквозного чтения / записи для DynamoDB | Блог о базе данных AWS

Это конец этого блога. Я хотел бы услышать ваши идеи и мысли 🤗 Пожалуйста, запишите их ниже 👇👇👇

✍️ Автор

Винь Ле @ vinhle95

👨🏻‍💻🤓🏋️‍🏸🎾🚀

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

Этот блог изначально опубликован по адресу https://blog.vinhlee.com/dynamo-db-3

Сказать привет 🙌 на:

🔗 Twitter

🔗 Средний

🔗 LinkedIn

🔗 Github

🔗 Персональный сайт