2016-04-30 4 views
4

Привет, ребята,Apache Ignite производительности многопользовательской подходы

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

Исключить:

Компания; продукт; количество

CompA; A; 15

CompA; B; 10

CompB; A; 20

CompB; B; 12

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

CacheConfiguration<String, String> cfgCompanyA = new CacheConfiguration<>(); 
cfgCompanyA.setName("CompanyA"); 
IgniteCache<String, String> cacheCompanyA = ignite.getOrCreateCache(cfgCompanyA); 

CacheConfiguration<String, String> cfgCompanyB = new CacheConfiguration<>(); 
cfgCompanyB.setName("CompanyB"); 
IgniteCache<String, String> cacheCompanyB = ignite.getOrCreateCache(cfgCompanyB); 

Любая помощь приветствуется.

ответ

3

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

1

Это зависит от ваших требований. Я не эксперт по Apache Ignite, поэтому я рассмотрю это на общем уровне.

Аргументы для отдельных кэшей:

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

Аргументы против отдельных кэшей:

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

хорошей альтернатива заключается в использовании использовать смесь как:

  • Поместите арендатор в кеше все время
  • Реализовать пул кэша, который может принимать каждые арендатор данные
  • Разрешить для нескольких пулов кэша-памяти, а также возможности присвоить пул кэша арендатора

Это позволяет:

  • Есть единый пул кэша для развития и (единиц) тестирование даже с несколькими арендаторами , Упрощение настройки разработки.
  • Назначение большого объема жильца к эксклюзивному бассейну кэша
  • Присвоить арендатор низкого объема в общем пул кэша, оптимизацию по использованию ресурсов
  • Новых арендаторы начинают в разделяемом пуле или могут быть у вас есть «Freemium» и «пробный» пул с другими ограничениями ресурсов.
  • Низкие арендаторы объема могут приходить и уходить без изменения конфигурации кэша
0

Я сделал несколько тестов с этим кодом (Scala): https://github.com/neoramon/scala-ignite-muiti-tenant С более 100к записей начинает более эффективно использовать кэш-арендатором.

Станок с: 4 сердечника, 8 ОЗУ (куча 4 ГБ) SSD.

Смежные вопросы