Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 7, 2010 21:54:05

blessmaster
От:
Зарегистрирован: 2010-12-07
Сообщения: 15
Репутация: +  0  -
Профиль   Отправить e-mail  

couchdb и ограничение на выдачу reduce

Ну, не забываем, не документом единым жив коуч (да и не только коуч). Можно за основу взять дерево сохранённое в любой предопределённой структуре, которую удобно поддерживать и при этом строить индексы под те выборки, которые мы хотим выполнять.

Вариант со списочным хранилищем дерева можно было бы разнести и по документам.

Плюс хранения одним документом: псевдотранзакции коуча позволяющие контролировать согласованность изменений.

Несомненный минус (особенно раздражающий при больших деревьях) - перестроение всего индекса при малейшем изменении дерева вместо обновления изменившегося фрагмента. Впрочем, при перемещении веток или изменении структуры возле “корня” будет перестроена большая часть индекса независимо от способа хранения.



Отредактировано (Дек. 7, 2010 22:00:58)

Офлайн

#2 Дек. 13, 2010 00:26:02

alexandre
От:
Зарегистрирован: 2010-11-16
Сообщения: 104
Репутация: +  0  -
Профиль   Отправить e-mail  

couchdb и ограничение на выдачу reduce

Такой вариант вроде удовлетворяет большинству требований:

{
"_": {
"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"
}
}
Можно узнать всех своих детей например “children”: , знать родителя например “parent”: “3”, пользовательская сортировка вроде тоже присутствует, может я чего то не доглядел в этом варианте?



Офлайн

#3 Дек. 13, 2010 02:48:04

dimabest
От:
Зарегистрирован: 2009-02-12
Сообщения: 253
Репутация: +  0  -
Профиль   Отправить e-mail  

couchdb и ограничение на выдачу reduce

Да, это самый толковый вариант. Каждый узел знает своих родителя и детей.

Только я словарь храню немного иначе, чтобы парсить меньше JSON-а.

{
0: (None, [1, 2, 3]),
1: (0, [11, 12]),
11: (1, [112, 113])
}
Тоесть
pid, childs = tree[id]
И, соответственно, 2 коллекции (MongoDB): ‘tree.rel’ (в одном документе только отношения между узлами) и ‘tree.nodes’ (узлы с данными).



Отредактировано (Дек. 13, 2010 02:56:14)

Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version