Я не работал с какими-либо механизмами кэширования и мне было интересно, какие у меня есть варианты в мире .net для следующего сценария.
В основном у нас есть служба REST, в которой пользователь передает идентификатор категории (папка Think), и в этой категории может быть много подкатегорий, и каждая из подкатегорий может иметь 1000 медиа-контейнеров (объектов ссылок на файл Think), которые содержат информацию о файл, который может находиться на сервере NAS или SAN (в данном случае это видео). Связь между этими категориями хранится в базе данных вместе с некоторыми правилами разрешений и метаданными о подкатегориях.
Таким образом, с точки зрения пользовательского интерфейса у нас есть ленивый загруженный элемент управления деревом, который управляется пользователем путем нажатия на каждую подпапку (подумайте о проводнике Windows). Как только они приходят к URL-адресу видеофайла, они могут смотреть видео.
Количество пользователей может вырасти до 1000-х, а подкатегории и видео могут быть в 10000-х по мере роста системы.
Вопрос заключается в том, следует ли нам продолжать работать в настоящее время, когда каждый запрос попадает в базу данных, или нам следует подумать о кэшировании данных?
Мы используем IIS 6/7 и Asp.net.
Ответы:
Во-первых, убедитесь, что код разделен таким образом, чтобы ваш поставщик данных мог легко переключаться. Мы говорим о разделении интерфейса и других принципах SOLID здесь.
Далее нужно знать ответ на следующий вопрос:
1) Будут ли данные часто меняться? 2) Часто ли приложение опрашивает вашу службу REST, чтобы получить эти обновления? 3) База данных используется для других целей? 4) Знаете ли вы о текущих проблемах производительности? 5) Обновляются ли данные вашим приложением и нужно ли отражать эти обновления в приложении?
Интересно то, что используя базу данных, вы уже технически кэшируете данные. Это то, что делает база данных. Многие исследования и разработки направлены на то, чтобы сделать базу данных как можно быстрее при получении данных. Например, он использует собственный кэш памяти для часто используемых данных.
Так что спросите себя, что вы надеетесь получить, обмениваясь поставщиками кэша? И какие текущие ограничения необходимо устранить?
Если вы не испытываете никаких замедлений, я бы просто сказал: «Нет, переключаться не нужно».
Это действительно большая тема. Кэши имеют тенденцию работать очень хорошо, когда данные должны быть географически распределены, но с точки зрения управления возникают огромные накладные расходы.
Сейчас я делаю проект, в котором принимаю точно такие же решения.
Мое решение до сих пор состоит в том, чтобы использовать только базу данных и поразить ее запросами от каждого клиента. Звучит противно, но масштабируется (в тестировании) гораздо больше, чем мне нужно, код очень прост.
Тем не менее, мой код использует своего рода шаблон хранилища, который абстрагирует поставщика данных основного приложения от кода базы данных. Если бы я хотел поменять поставщика кеша, такого как GemFire, для этого потребовалось бы довольно небольшое количество кода.
источник
По словам Торбьерна, на самом деле не хватает информации.
Кэширование, если оно выполнено неправильно, может причинить вам и вашим пользователям много горя. Убедитесь, что вам нужно беспокоиться о кэшировании, прежде чем усложнять приложение.
Таким образом, при отсутствии информации, указывающей на то, что вам действительно нужно кешировать, не кешируйте.
[Общее правило оптимизации: если вам нужно спросить, должен ли я что-то сделать, ответ - нет] *
* В большинстве случаев ответом будет «да», а не утверждение.
источник