У меня есть эта старая пакетная система. Планировщик хранит все вычислительные узлы в одном большом массиве. Теперь, когда ОК по большей части, потому что большинство запросов можно решить путем фильтрации для узлов, которые удовлетворяют запросу.
Проблема, которую я имею сейчас, заключается в том, что помимо некоторых базовых свойств (количество процессоров, памяти, ОС) существуют также эти странные свойства группировки (city, infiniband, network scratch).
Теперь проблема заключается в том, что когда пользователь запрашивает узлы с infiniband, я не могу просто дать ему какие-либо узлы, но я должен дать ему узлы, подключенные к одному коммутатору infiniband, поэтому узлы могут фактически обмениваться данными с помощью infiniband.
Это все еще нормально, когда пользователь запрашивает одно из таких свойств (я могу просто разбить массив на каждое из свойств, а затем попытаться выбрать узлы в каждом разделе отдельно).
Проблема заключается в объединении нескольких таких свойств, потому что тогда мне пришлось бы генерировать все комбинации подмножеств (разделов основного массива).
Хорошо, что большинство свойств находятся в отношении подмножества или эквивалентности (это похоже на то, что машины на одном бесконечном переключателе находятся в одном городе). Но это, к сожалению, не совсем верно.
Есть ли какая-то хорошая структура данных для хранения такого рода полуиерархической, преимущественно дерево-подобной вещи?
EDIT: пример
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
Желаемый результат: (node1, node2)
или (node5,node6)
или (node7,node8)
.
В хорошей ситуации этот пример не произойдет, но в некоторых случаях у нас есть эти странные межсайтовые соединения. Если бы узлы в city2
были бы все на infiniband switch04
, это было бы легко. К сожалению, теперь мне приходится создавать группы узлов, которые имеют один и тот же переключатель infiniband и одну и ту же сетевую файловую систему.
В действительности проблема намного сложнее, поскольку пользователи не запрашивают целые узлы, а свойств много.
Изменить: добавлен желаемый результат для запроса.