NHibernate MemCached с Protobuf-net.Enyim - это действительно работает?

Я использовал следующие сборки для соединения кэширования NHibernate 2-го уровня с Enyim Memcached с помощью двоичного сериализатора Protobuf-net:

  • NHibernate
  • NHibernate.Caches.EnyimMemcached
  • Enyim.Caching
  • Protobuf-сеть
  • Protobuf-net.Enyim

Недавно мне стало известно, что, несмотря на подключение protobuf-net к EnyimMemcached, я, вероятно, на самом деле не использую этот сериализатор, так как все мои объекты были помечены просто [Serializable] и ни [DataContract] или же [ProtoContract] с соответствующими заказанными Data/ProtoMembers для свойств. Я могу заставить protobuf-net работать с EnyimMemcached, когда взаимодействую с memcache непосредственно после добавления соответствующих атрибутов (или зарегистрировать их вручную с помощью класса RuntimeTypeModel.Default protobuf-net).

Однако, даже если я проведу должную осмотрительность при регистрации моих типов с помощью protobuf-net, я не думаю, что какая-либо запись в кэше, поступающая из NHibernate, будет фактически сериализована protobuf-net, потому что NHibernate.Caches.EnyimMemcached хранит записи в кэше в пределах DictionaryEntry объекты:

bool returnOk = client.Store(
    StoreMode.Set, KeyAsString(key),
    new DictionaryEntry(GetAlternateKeyHash(key), value),
    TimeSpan.FromSeconds(expiry));

DictionaryEntry не имеет [DataContract] а также [DataMember(Order = xx)] атрибутов. Это заставляет меня задуматься...

Могу ли я даже правильно использовать сериализатор protobuf-net для кэширования NHibernate 2-го уровня?

1 ответ

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

Другие вопросы по тегам