У меня есть старая пакетная система. Планировщик хранит все вычислительные узлы в одном большом массиве. По большей части это нормально, потому что большинство запросов можно решить путем фильтрации узлов, удовлетворяющих запросу.
Проблема, с которой я сталкиваюсь сейчас, заключается в том, что помимо некоторых основных свойств (количество процессоров, памяти, ОС) есть еще эти странные свойства группировки (город, бесконечная полоса пропускания, сетевая царапина).
Теперь проблема с ними заключается в том, что когда пользователь запрашивает узлы с infiniband, я не могу просто дать ему какие-либо узлы, но я должен предоставить ему узлы, подключенные к одному коммутатору infiniband, чтобы узлы могли фактически общаться с использованием infiniband.
Это по-прежнему нормально, когда пользователь запрашивает только одно такое свойство (я могу просто разбить массив на разделы для каждого из свойств, а затем попытаться выбрать узлы в каждом разделе отдельно).
Проблема возникает при объединении нескольких таких свойств, потому что тогда мне пришлось бы генерировать все комбинации подмножеств (разделов основного массива).
Хорошо то, что большинство свойств находятся в отношении подмножества или эквивалентности (имеет смысл, если машины на одном бесконечнополосном коммутаторе находятся в одном городе). Но это, к сожалению, не совсем верно.
Существует ли какая-нибудь хорошая структура данных для хранения такой полуиерархической, в основном древовидной структуры?
РЕДАКТИРОВАТЬ: пример
node1 : city=city1, infiniband=switch03, networkfs=server01
node2 : city=city1, infiniband=switch03, networkfs=server01
node3 : city=city1, infiniband=switch03
node4 : city=city1, infiniband=switch03
node5 : city=city2, infiniband=switch03, networkfs=server02
node6 : city=city2, infiniband=switch03, networkfs=server02
node7 : city=city2, infiniband=switch04, networkfs=server02
node8 : city=city2, infiniband=switch04, networkfs=server02
Запрос пользователя:
2x node with infiniband and networkfs
Желаемый вывод: (узел1, узел2)
или (узел5,узел6)
или (узел7 ,узел8)
.
В хорошей ситуации этот пример не случился бы, но в некоторых случаях у нас действительно есть эти странные межсайтовые соединения. Если бы все узлы в city2
были бы на infiniband switch04
, это было бы легко. К сожалению, теперь мне приходится генерировать группы узлов, которые имеют один и тот же коммутатор infiniband и одну и ту же сетевую файловую систему.
На самом деле проблема намного сложнее, так как пользователи не запрашивают целые узлы, а свойств много.
Изменить: добавлен желаемый вывод для запроса.