Кеширование
Кэширование - важный элемент высокопроизводительной базы данных. 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