Как использовать Ehcache 3 с постоянным хранилищем для кэширования с отложенной записью?

Я использую приведенный ниже код для настройки постоянного кеша с помощью Ehcache3.

Я хотел бы использовать алгоритм отложенной записи, чтобы попытаться ускорить запись. Однако я не нашел примера кода или руководства для этого. Официальная документация по ehcache отсутствует, и когда я обратился за помощью на их форум, все, что я получил, было: «Мы должны исправить этот документ!» Я нашел много примеров того, как это сделать с кэшами, которые не относятся к типу PersistentCacheManager, которые не работают с новым типом класса.

Есть несколько примеров кода, в первую очередь поведение отложенной записи ehcache, но я не уверен какая версия Ehcache используется.

Я немного застрял здесь, и мне кажется, что я не могу быть первым, кто захочет писать в постоянное хранилище с поведением отложенной записи. Я обнаружил, что значение «отстающей записи» несколько расплывчато. Что я хочу сделать, так это записать на диск по шаблону фрагментации, а не по одному. Я надеюсь, что это ускорит скорость записи при замене существующих данных.

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

            PersistentCacheManager myCacheManager;
            myCacheManager = CacheManagerBuilder.newCacheManagerBuilder()
            .with(CacheManagerBuilder.persistence(this.filename))
            .withCache("myCache",
                    CacheConfigurationBuilder.newCacheConfigurationBuilder(
                            Long.class, long[].class,
                            ResourcePoolsBuilder.newResourcePoolsBuilder()
                                    .heap(100000, EntryUnit.ENTRIES)
                                    .offheap(1, MemoryUnit.GB)
                                    .disk(2000, MemoryUnit.GB, true)
                    )
            ).build(true);

person BAMF4bacon    schedule 19.07.2016    source источник


Ответы (1)


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

  • отложенная запись — это асинхронное расширение шаблона сквозной записи в кэшировании. Описания можно найти в разных местах в Интернете, в том числе в Википедии. Вы можете включить отложенную запись только для кэшей кучи. Он не требует дискового уровня и никоим образом не будет мешать тому, как данные записываются на диск в самом кэше.
  • Чтобы реализовать отложенную запись, вам сначала необходимо обеспечить сквозную запись, настроив CacheLoaderWriter, который будет реализовывать взаимодействие со всем, что действует как ваше хранилище эталонных данных (БД, Служба ReST, ...)

И да, как признано, документацию по этой теме можно улучшить. Обратите внимание, что помимо конфигурации и точного интерфейса для реализации, который сочетает в себе функции чтения и записи из Ehcache 2.x, документированные принципы высокого уровня остаются в силе.

Итак, чтобы вернуться к вашему замешательству по поводу того, как записи на диск отправляются из Ehcache - это деталь реализации, и она никоим образом не происходит за мутацию. Обратите внимание, что дисковое хранилище Ehcache не защищено от сбоев, и если вы не закроете его должным образом, CacheManager данные будут сброшены при перезапуске. Это не функция, которая превращает кеш в хранилище ключ-значение! И уж точно не гарантия долговечности.

person Louis Jacomet    schedule 19.07.2016
comment
Так что, казалось бы, корень этого недоразумения был в одном термине. Теперь я понимаю, что в документации Ehcache SoR всегда является внешней системой, я понимаю примеры. - person BAMF4bacon; 20.07.2016