Совместное использование nHibernate и Hibernate 2-го уровня кеша - PullRequest
1 голос
/ 13 июля 2010

Можно ли разделить кэш 2-го уровня между решениями hibernate и nhibernate?У меня есть среда, в которой есть серверы, на которых работает .net, и серверы, работающие на java, которые оба обращаются к одной и той же базе данных.

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

Если это невозможно, то какие решения другие придумали?

Ответы [ 2 ]

3 голосов
/ 13 июля 2010

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

Для этого потребуется (и это очень вероятно упрощенно):

  1. Возможность доступа к кешу из Java и .Net.
  2. Наличие реализаций провайдера кэша для обоих (N) Hibernate.
  3. Возможность чтения / записи данных в формате, совместимом с обоими языками (или нет никакого смысла во взаимном объединении кэша).

Это звучит выполнимо, но:

  • Мне неизвестно о существующем готовом к использованию решении, реализующем это (моей первой идеей был Memcache, но AFAIK Memcache хранит сериализованную версию данныхтак что это не соответствует требованию № 3, которое является наиболее важным).
  • Интересно, если бы использование нейтрального для языка формата для хранения данных не создавало бы слишком много накладных расходов (и каким-то образом препятствовало бы цели использования кэша)).

Если это невозможно, какие решения другие придумали?

Мне никогда не приходилось это делать, но если мыговорим о реd-write cache, и если вы используете два отдельных кэша, вам придется сделать недействительной данную область Java-кэша со стороны .Net и наоборот.Вам придется написать код, чтобы справиться с этим.

1 голос
/ 13 июля 2010

Как сказал Паскаль, маловероятно, что совместное использование второго кэша технически возможно.

Однако вы можете подумать об этом с другой точки зрения.

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

Пример:

  • Приложение A в основном читает Customer данные и записывает Invoice данные
  • Приложение B в основном читает Invoice данные и записывает Customer данные
  • Поэтому приложение A кэширует Customer данные иПриложение B кэширует Invoice data

Когда приложение A, например, изменяет счет-фактуру, оно отправляет сообщение в приложение B и сообщает ему об удалении счета-фактуры из кэша.

Вы также можете выселить целые типы объектов, коллекции и регионы.

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