Стратегии кэширования (продолжение к предыдущему посту)
Кэширование — это концепция хранения часто используемых данных во временном месте, доступ к которому осуществляется быстрее, чем к исходному источнику.
Базы данных часто являются основой приложений, храня критически важную информацию. Однако получение данных из базы данных может быть относительно медленной операцией, особенно для сложных запросов или больших наборов данных.
Таким образом, если мы используем кэширование данных, мы можем:
1. Значительно улучшить время отклика.
2. Снизить нагрузку на базу данных.
3. Обеспечить более плавный пользовательский опыт.
Стратегии, оптимизированные для чтения
Кэширование в стороне (Cache-Aside)
* Приложение сначала проверяет наличие данных в кэше.
* Если данные найдены (попадание в кэш), они возвращаются.
* Если нет (промах кэша), данные извлекаются из базы данных, сохраняются в кэше и затем возвращаются.
* Известна как «отложенная загрузка» — получение данных по требованию.
* Первый запрос для определённого фрагмента данных всегда приводит к промаху кэша, так как данные ещё не загружены.
* Отличается простотой реализации.
Применение:
* Для нагрузок с преобладанием операций чтения и редко изменяющимися данными.
Чтение через кэш (Read-Through)
* Кэш выступает в качестве основного источника данных.
* Если данных нет в кэше:
* они извлекаются из базы данных;
* сохраняются в кэше;
* возвращаются в приложение.
* По сути, это абстрагирование источника данных от приложения.
Применение:
* Для приложений, где критически важны сверхбыстрые операции чтения (аналитика в реальном времени и т. д.).
Предварительное обновление (Refresh-Ahead)
* Кэш проактивно обновляет данные до их истечения, снижая вероятность промахов кэша.
Применение:
* Для приложений с предсказуемыми шаблонами доступа к данным.
Клиентское кэширование (Client-Side Caching)
* Данные кэшируются на устройстве клиента.
* Повышенная сложность, требуется управление аннулированием кэша на стороне клиента.
Применение:
* Для приложений с часто используемым статическим контентом или когда персонализация не является основной задачей.
Стратегии, оптимизированные для записи
Запись через кэш (Write-Through)
* Данные сначала записываются в кэш, а затем «немедленно» в базу данных.
* Операция записи считается завершённой только после обновления и кэша, и базы данных.
* Обеспечивает строгую согласованность данных между кэшем и базой данных.
Применение:
* Для приложений, где критически важна согласованность данных.
Запись позади (Write-Behind / Write-Back)
* Данные сначала записываются в кэш, а затем «асинхронно» в базу данных.
Применение:
* Для приложений, где производительность записи является приоритетом, и допустима некоторая потеря данных.
Запись в обход (Write-Around)
* Обходит кэш при записи, записывая напрямую в базу данных.
* Кэш обновляется только при последующих операциях чтения.
Применение:
* Для нагрузок с преобладанием операций записи, где большинство данных записывается один раз и редко читается.
Post #1893
1.95K
- 👍 11
- 🔥 4
- 👏 2