NHibernate - две фабрики SessionFactories обращаются к одной базе данных - PullRequest
5 голосов
/ 04 января 2011

Это относится к предыдущему вопросу, который я задал , касающемуся разбиения веб-приложения asp.net mvc на два приложения - одно общедоступное и одно админ .Разумеется, оба они будут использовать одну и ту же базу данных.

С двумя веб-приложениями у меня будет два хост-приложения и, таким образом, две отдельные фабрики сессий Nihbernate. Меня беспокоит то, что их отдельные кэши данных вызовут всевозможные проблемы.

Во время публикации я рассмотрел этот вопрос , который охватывает аналогичную проблему (длядругая причина).Я действительно не хочу настраивать какой-то распределенный кеш только для административного приложения с низким уровнем использования.

Как это можно решить?Разве разделение административной части на собственное приложение невозможно с NHibernate без радикальных мер?

Спасибо.

Ответы [ 2 ]

1 голос
/ 07 января 2011

Мы выполняем это успешно, хотя некоторое расхождение в данных всегда является проблемой.Однако, поскольку кэш 2-го уровня настраивается для каждого сайта, его можно отключить, а также отключить для определенных областей кеша в вашем менеджере.

Кэш 2-го уровня будет использоваться только для чтения, поскольку явные обновления будутбыть сброшенным и сохраненным непосредственно.

Если вы обеспокоены тем, что контент на сайте будет "старым" после изменения, потребуется какой-то триггер, чтобы дать сайту команду удалить кеш.Затем NHibernate изгонит весь кэш 2-го уровня для определенного типа сущности, если я правильно его запомнил.

Я думаю, что ваша проблема с параллелизмом будет минимальной, если ваш сайт и ваш администратор обновят разные сущности.Например, в интернет-магазине:

Site will create orders, modify customers etc but only read products, prices and categories

Admin will modify orders, products, prices and categories but only read customers

Однако вы можете указать NHibernate обновлять измененные поля / свойства ваших объектов только для тех объектов, которые вас беспокоят из-за проблем параллелизма с помощью dynamic-update = "true" в вашем отображении.,Это не полностью решит вашу проблему, но минимизирует проблемы параллелизма.

0 голосов
/ 09 января 2011

Во-первых, вы должны знать, что NHibernate не включает кэш второго уровня по умолчанию .

Итак, на самом деле вам даже не нужно каких-либо дополнительных шагов, чтобы просто не использовать распределенный кеш . Просто используйте ваш "Admin" ISessionFactory и не включайте для этого кэш L2.

Это может быть своего рода проблема внутри одного приложения / фабрики, но вы уже решили эту проблему, разделив их на 2 разных физических приложения.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...