Write-Around

Write Around — шаблон проєктування для оптимізації використання кешу.

Проблема[ред. | ред. код]

Аплікація застосовує кеш для оптимізації повторного доступу до даних. Однак дані рідко оновлюються. Необхідно забезпечити спосіб підтримувати актуальні дані в кеші.

Вирішення[ред. | ред. код]

Створюємо сервіс обов'язком якого буде кешування. Він знає про розташування даних та оновлює кеш при потребі. Зміна даних призводить лише до оновлення сховища.

Переваги та недоліки[ред. | ред. код]

Переваги[ред. | ред. код]

  • забезпечує часткову консистенцію даних при оптимізованому доступі
  • забезпечує непередбачувану потребу в ресурсах. Дані поміщаються в кеш на вимогу
  • система може працювати при несправності кешу. В такому випадку дані беруться зі сховища
  • забезпечує збереження статичних даних. Кеш-сервіс реалізовує стратегії кешування в залежності від вимоги
  • аплікація розділяє дані на читання та запис

Недоліки[ред. | ред. код]

  • не забезпечує повну консистенцію даних. Дані можуть бути оновлені, стороннім сервісом в той час як кеш міститиме застарілу інформацію
  • нормалізовані дані. Аплікації потрібно провести додаткові операції над даними, щоб привести їх до потрібного формату
  • аплікації необхідно працювати як зі сховищем так із кешем

Опис[ред. | ред. код]

Робота патерну write-around
  1. Читаємо дані з кешу.
  2. Кеш-провайдер забезпечує дані та їх валідність.
  3. Оновлені дані поміщаємо в сховище.


public Data GetData() { 	return _cache.GetOrAdd(_database.GetData); }  public void UpdateData(Data data) { 	return _database.UpdateData(data); } 

Див. також[ред. | ред. код]

Джерела[ред. | ред. код]