Форум сайта python.su
Ну, не забываем, не документом единым жив коуч (да и не только коуч). Можно за основу взять дерево сохранённое в любой предопределённой структуре, которую удобно поддерживать и при этом строить индексы под те выборки, которые мы хотим выполнять.
Вариант со списочным хранилищем дерева можно было бы разнести и по документам.
Плюс хранения одним документом: псевдотранзакции коуча позволяющие контролировать согласованность изменений.
Несомненный минус (особенно раздражающий при больших деревьях) - перестроение всего индекса при малейшем изменении дерева вместо обновления изменившегося фрагмента. Впрочем, при перемещении веток или изменении структуры возле “корня” будет перестроена большая часть индекса независимо от способа хранения.
Отредактировано (Дек. 7, 2010 22:00:58)
Офлайн
Такой вариант вроде удовлетворяет большинству требований:
{
"_": {
"children": ["3", "6" ],
"parent": null
},
"3": {
"children": ["2", "4"],
"parent": "_"
},
"6": {
"children": [ ],
"parent": "_"
},
"2": {
"children": [ ],
"parent": "3"
},
"4": {
"children": ["5"],
"parent": "3"
},
"5": {
"children": [ ],
"parent": "4"
}
}
Офлайн
Да, это самый толковый вариант. Каждый узел знает своих родителя и детей.
Только я словарь храню немного иначе, чтобы парсить меньше JSON-а.
{
0: (None, [1, 2, 3]),
1: (0, [11, 12]),
11: (1, [112, 113])
}
pid, childs = tree[id]
Отредактировано (Дек. 13, 2010 02:56:14)
Офлайн