2016-12-13 5 views
1

У меня есть сетка данных Ignite из пяти серверов (скажем, A, B, C, D и E). Разделенный кеш был распределен между этими пятью серверами с количеством резервных копий, установленным как 1.Ввод записей кэша на конкретный сервер Ignite

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

Возможно ли, что я могу направить моего клиента Ignite, чтобы поместить запись кэша на конкретный сервер (скажем, E)?

ответ

1

Единственный способ сделать это - реализовать свои собственные Affinity Function вместо тех, которые предоставляются из коробки. Тем не менее, я бы запретил вам переосмысливать этот подход, потому что он не масштабируется. Функции Affinity, включенные в Ignite, предназначены для обеспечения равномерного распределения на любом наборе узлов, поэтому вы можете динамически масштабироваться вверх и вниз по мере необходимости. Ваш подход гораздо менее гибкий.

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

И в конце концов, можете ли вы дать более подробную информацию о вашем случае использования? Я буду рад дать некоторые советы о том, как подойти к нему.

+0

Я на самом деле пытаюсь использовать Apache Ignite для создания фильтра цветения, для которого требуется распределенный массив из 100 миллиардов бит. Поскольку Ignite не поддерживает структуру данных распределенного массива, я пытаюсь разбить массив на небольшие битовые множества и сохранить их в виде записей в кеше. Я хотел контролировать дистрибутив, так как это помогло мне решить, какой сервер имеет конкретную запись в кеше и направлять мои вычислительные задания (используя сетку Ignite Compute) на этот конкретный сервер. Есть ли способ, которым я могу получить UUID узла на сервере с определенным ключом? –

+0

Я только что обнаружил, что можно получить раздел, на котором присутствует конкретный ключ, с помощью функции CacheConfiguration(). GetAffinityFunction(). Partition (Object key). Можете ли вы сказать мне, что можно найти UUID сервера Ignite с этим разделом? –

+0

Это должно быть сделано через API Affinity, который можно получить с помощью метода Ignite.affinity(). Но для отправки закрытого закрытия вы можете просто использовать 'IgniteCompute.affinityRun()' и 'IgniteCompute.affinityCall()' методы. –