Чи слід кешувати дані або керувати базою даних?


10

Я не працював із жодними механізмами кешування, і мені було цікаво, які мої варіанти є у світі .net для наступного сценарію.

У нас в основному є служба REST, де користувач передає ідентифікатор категорії (папка продумань), і ця категорія може мати безліч підкатегорій, і кожна з підкатегорій може мати 1000 контейнерів медіа (посилання на об'єкти продуктивних файлів), які містять інформацію про файл, який може бути на сервері NAS або SAN (файли - це відео у цьому випадку). Зв'язок між цими категоріями зберігається в базі даних разом з деякими правилами дозволу та метаданими про підкатегорії.

Таким чином, з точки зору інтерфейсу користувача, ми маємо лінивий елемент управління деревом, який керується користувачем, клацаючи на кожній підпапці (подумайте про Windows Explorer). Після того, як вони знайдуть URL-адресу відеофайлу, вони зможуть переглянути відео.

Кількість користувачів може вирости до 1000-х, а підкатегорії та відеоролики можуть бути в 10000-х, коли система зростає.

Питання полягає в тому, чи слід продовжувати роботу в даний момент, коли кожен запит потрапляє в базу даних чи ми повинні думати про кешування даних?

Ми використовуємо IIS 6/7 та Asp.net.


4
Ви профілювали свою систему під реалістичним навантаженням? Чи можна кешувати дані? Було б сенс?

Відповіді:


13

По-перше, переконайтеся, що код розподілений таким чином, щоб ваш постачальник даних міг легко перемикатися. Тут ми говоримо про поділ інтерфейсів та інші принципи SOLID.

Далі потрібно знати відповідь на наступне:

1) Чи часто змінюватимуться дані? 2) Чи часто програма запитує вашу послугу REST, щоб отримати ці оновлення? 3) Чи використовується база даних для інших цілей? 4) Чи знаєте ви про якісь поточні проблеми щодо ефективності? 5) Чи оновлюються дані вашої програми та чи потрібно ці оновлення відображати у додатку?

Цікавим є те, що користуючись базою даних, ви вже технічно кешуєте дані. Ось що робить база даних. Дуже багато науково-дослідних та науково-дослідних робіт спрямовується на те, щоб зробити базу даних якомога швидшою при отриманні даних. Він використовує власний кеш пам'яті, наприклад, для часто використовуваних даних.

Тож запитайте себе, що ви сподіваєтеся отримати, міняючи постачальників кеш-пам'яті? І Які поточні обмеження потребують вирішення?

Якщо ви зараз не відчуваєте жодних повільних спадів, я просто скажу «ні, не потрібно перемикатися».

Це дійсно велика тема. Кеші, як правило, справді добре, коли дані потрібно розподілити географічно, але в плані управління великі накладні витрати.

Я зараз займаюся проектом, коли я приймаю абсолютно такі самі рішення.

Наразі моє рішення - використовувати лише базу даних та вражати її запитами на опитування від кожного клієнта. Звучить приємно, але це масштабує (на тестуванні) набагато більше, ніж мені потрібно, код дуже простий.

При цьому мій код використовує своєрідну модель репозиторію, яка абстрагує основного постачальника даних програми від коду бази даних. Якщо я хотів би поміняти місцями в такому постачальнику кеша, як GemFire, для цього знадобиться досить невелика кількість коду.


Дякую Іану. На цьому етапі у нас є база даних, але це було скоріше освітнім питанням про те, на що слід звернути увагу.
JD01

18

Відповідно до коментарів Thorbjørn, дійсно недостатньо інформації.

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

Отже, за відсутності інформації, яка вказує, що вам потрібно кешувати, не кешуйте.

[Загальне правило оптимізації: Якщо вам потрібно запитати, чи варто мені щось робити, відповідь - ні] *
* Це було б твердженням, а не питанням у більшості місць, де відповідь - так.


Любіть загальне правило, добре сказано :)
Ян

@ dan-mcgrath Це гарна ідея кешувати записи, якщо я збираюсь отримати доступ до кожного запису рівно 2 рази лише протягом проміжку, скажімо, 5 хвилин, і ніколи після цього?
nishantbhardwaj2002
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.