Я был бы невероятно удивлен, если бы вам даже нужно было загрузить всю вашу информацию в память. Я говорю это потому, что в качестве одного примера я работаю над веб-приложением, которое (по разным причинам) загружает тысячи записей на многих страницах. Это PHP + MySQL. И даже в этом случае он может сделать это и визуализировать страницу за 100 мс.
Прежде чем идти по этому маршруту, убедитесь, что вам нужно. Сначала сделайте вашу базу данных максимально производительной. Теперь очевидно, что это включает в себя такие вещи, как наличие соответствующих индексов и настройка базы данных, но даже если вы ставите лошадь перед повозкой.
Прежде всего, вам необходимо убедиться, что у вас есть хорошая модель реляционных данных: та, которая поддается для выполнения запросов. Это столько же искусства, сколько и науки.
Также вам может понравиться NHibernate, но ORM не всегда лучший выбор . Например, в некоторых ключевых случаях SQL-код, написанный вручную, будет значительно лучше.
Теперь, если у вас есть хорошая модель данных и что вы оптимизировали свои индексы и параметры базы данных, а затем правильно настроили NHibernate, тогда и только тогда вы должны рассмотреть вопрос о сохранении данных в памяти тогда и только тогда, когда производительность по-прежнему остается проблемой .
Чтобы представить это в перспективе, единственное время, которое мне нужно было сделать, - это системы, которые должны выполнять миллионы транзакций в день.
Одна из причин, по которой следует избегать кэширования в памяти, заключается в том, что он добавляет много сложности. Вам приходится иметь дело с такими проблемами, как истечение срока действия кэша, независимые обновления базового хранилища данных, используете ли вы синхронные или асинхронные обновления, как вы предоставляете клиенту согласованное (если не актуальное) представление ваших данных, как вы поступаете с аварийным переключением и репликацией и так далее. Это огромная сложность, которую нужно заплатить.
Предполагая, что вы сделали все вышеперечисленное и вам все еще это нужно, мне кажется, что вам нужно решение для кеша или сетки. Вот обзор решений Java для грид / кластеров , но многие из них (например, Coherence, memcached) применимы и к .Net. Другой выбор для .Net - Velocity .
Необходимо указать и подчеркнуть, что что-то вроде NHibernate является непротиворечивым, только если ничто не обновляет базу данных извне и что существует только один процесс с поддержкой NHibernate (исключая кластерные решения). Если два настольных приложения на двух разных компьютерах обновляют одну и ту же базу данных с помощью NHibernate, кэширование просто не будет работать, потому что персистентные блоки просто не будут знать об изменениях, вносимых другим.