2016-08-25 8 views
0

В эти дни я провел несколько экспериментов по загрузке loadCache, localLoadCache и данным запроса из кеша. Однако я все больше и больше озадачивался. Вот мои загадки. Пожалуйста, помогите мне, если вы знаете, как объяснить.loadCache() и localLoadCache() и данные хранения внутреннего хранилища логики

  1. В чем разница между loadCache и localLoadCache?
  2. Какова логика хранения данных в кеше? Например, я запускаю узел с именем «A», чей кеш хранит некоторые данные (предположим 10 элементов) из таблицы Person в DB. И затем внутри кода я позволяю ему запрашивать данные из кеша за 5 секунд. Затем я запускаю новый узел с именем «B», в кеше которого хранится 20 других данных элементов из таблицы Person в DB, а также позволяет запрашивать данные из кеша за 5 секунд. Однако почему запрос данных из «A» и «B» - это 30 элементов данных (сумма 10 + 20)?

  3. Если я позволю B поместить данные нового элемента в кеш, а затем 'A' также может запросить новые данные? Когда я закрою B, тогда A запросит 10 элементов данных, что означает, что он такой же, как первый. Зачем?

ответ

0

Ignite - это распределенное хранилище данных. Он разбивает ваш набор данных и равномерно распределяет его по доступным узлам. Например, если у вас есть 30 записей и 2 узла, у вас будет примерно 15 записей на каждом узле. Владение автоматически определяется Ignite, вы не можете решить, где хранить конкретную запись (ну, вы можете, но это нетривиально).

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

Что касается нагрузки, то процесс состоит в следующем:

  1. Каждый узел самостоятельно выбирает всю таблицу из БД и через итерацию строк.
  2. Для каждой строки реализация CacheStore создает объекты ключа и значения и передает их в кеш.
  3. Кэш решает, принадлежит ли эта конкретная пара ключ-значение локальному узлу. Если да, он сохраняется. Если нет, он отбрасывается.
  4. В результате таблица будет полностью сохранена в кластере распределенным образом, и каждый узел будет иметь собственный поднабор данных.

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

+0

Спасибо за ваше терпение и доброту. 1. И как кеш решает, принадлежит ли конкретная пара ключ-значение локальному узлу? С некоторыми алгоритмами? 2. Как вы сказали, loadCache инициирует загрузку распределенных данных. А как насчет localLoadCache Будет ли это инициировать распределенную загрузку данных? –

+0

1. Для этого по умолчанию используется алгоритм хэширования Randezvous: https://en.wikipedia.org/wiki/Rendezvous_hashing. 2. 'localLoadCache' загружается только локально. Но обычно не имеет смысла загружать только один узел, потому что вы не будете загружать всю таблицу. Метод существует для случаев, когда пользователь по какой-либо причине хочет инициировать процесс на всех узлах вручную. –