Гость
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / Как построить дерево / 25 сообщений из 34, страница 1 из 2
01.12.2010, 22:22
    #36990146
kixiro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как построить дерево
Как проще построить взаимосвязь с объектами в noSQL? Требуется хранить данные, связанные между собой по древовидной структуре. Каждый узелок такой структуры хранит несколько параметров(у каждого узелка свой набор), т.е. каждый параметр это свой key - value. Есть ли базы, в которых построение взаимосвязей уже продуманно и это не требуется реализовывать самому? Дерево должно бесконечно расширяться во все направления.
...
Рейтинг: 0 / 0
02.12.2010, 01:44
    #36990317
dexsu
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как построить дерево
kixiroКак проще построить взаимосвязь с объектами в noSQL? Требуется хранить данные, связанные между собой по древовидной структуре. Каждый узелок такой структуры хранит несколько параметров(у каждого узелка свой набор), т.е. каждый параметр это свой key - value. Есть ли базы, в которых построение взаимосвязей уже продуманно и это не требуется реализовывать самому? Дерево должно бесконечно расширяться во все направления.
Все предельно просто - каждый "узелок" хранит ссылку на родителя.
...
Рейтинг: 0 / 0
02.12.2010, 03:08
    #36990339
an0nym
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как построить дерево
kixiro,

готовы ли вы под это дерево выделить отдельную базу (насколько это большой и важный кусок приложения)?

Почитайте http://habrahabr.ru/blogs/nosql/77909/ . Сам не пробовал, но возможно Neo4J или нечто подобное вам идеально подойдет.
...
Рейтинг: 0 / 0
02.12.2010, 11:51
    #36990820
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как построить дерево
kixiroКак проще построить взаимосвязь с объектами в noSQL? Требуется хранить данные, связанные между собой по древовидной структуре. Каждый узелок такой структуры хранит несколько параметров(у каждого узелка свой набор), т.е. каждый параметр это свой key - value. Есть ли базы, в которых построение взаимосвязей уже продуманно и это не требуется реализовывать самому? Дерево должно бесконечно расширяться во все направления.

есть, реляционные базы.
Раньше были иерархические.

Но вопрос: может надо определиться вам нужна носкл база или релаяционная и работать с ней.
Не совсем понятно как вы будете эти связи использовать, даже если реализуете, механизм запросов скуден в носкл базах...
...
Рейтинг: 0 / 0
02.12.2010, 11:52
    #36990824
an0nym
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как построить дерево
WinnipuhkixiroКак проще построить взаимосвязь с объектами в noSQL? Требуется хранить данные, связанные между собой по древовидной структуре. Каждый узелок такой структуры хранит несколько параметров(у каждого узелка свой набор), т.е. каждый параметр это свой key - value. Есть ли базы, в которых построение взаимосвязей уже продуманно и это не требуется реализовывать самому? Дерево должно бесконечно расширяться во все направления.

есть, реляционные базы.
Раньше были иерархические.

Но вопрос: может надо определиться вам нужна носкл база или релаяционная и работать с ней.
Не совсем понятно как вы будете эти связи использовать, даже если реализуете, механизм запросов скуден в носкл базах...
А еще есть базы на графах, документо-ориентированные базы... nosql - это больше, чем key-value. Почитайте выше ссылку, советую.
...
Рейтинг: 0 / 0
02.12.2010, 13:16
    #36991060
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как построить дерево
an0nymWinnipuhпропущено...


есть, реляционные базы.
Раньше были иерархические.

Но вопрос: может надо определиться вам нужна носкл база или релаяционная и работать с ней.
Не совсем понятно как вы будете эти связи использовать, даже если реализуете, механизм запросов скуден в носкл базах...
А еще есть базы на графах, документо-ориентированные базы... nosql - это больше, чем key-value. Почитайте выше ссылку, советую.

честно говоря не увидел чего-то такого... чудес не бывает

Система ключ/значения сама по себе простая, и не сложная для реализации, но не эффективна, если вы заинтересованы только в запросе или обновлении части данных. Так же трудно реализовать сложные структуры поверх распределенных систем.

Кроме того, зачем автору темы хранить иерархию? чтобы выбирать записи одну за другой?
тогда - да.
Если же он хочте делать сложные выборки множеств, учитывая иерархические связи то я я не вижу как это реализовать на носкл базах.
Расскажите...
...
Рейтинг: 0 / 0
02.12.2010, 13:17
    #36991064
an0nym
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как построить дерево
Winnipuhan0nymпропущено...

А еще есть базы на графах, документо-ориентированные базы... nosql - это больше, чем key-value. Почитайте выше ссылку, советую.

честно говоря не увидел чего-то такого... чудес не бывает

Система ключ/значения сама по себе простая, и не сложная для реализации, но не эффективна, если вы заинтересованы только в запросе или обновлении части данных. Так же трудно реализовать сложные структуры поверх распределенных систем.

Кроме того, зачем автору темы хранить иерархию? чтобы выбирать записи одну за другой?
тогда - да.
Если же он хочте делать сложные выборки множеств, учитывая иерархические связи то я я не вижу как это реализовать на носкл базах.
Расскажите...
Neo4J обладает поистине уникальной моделью данных, храня объекты и связи в качестве узлов и ребер графа. Для запросов, которые соответствуют этой модели (например, иерархических данных) они могут быть в тысячу раз быстрее, чем альтернативные варианты.
...
Рейтинг: 0 / 0
02.12.2010, 18:35
    #36991974
Siemargl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как построить дерево
В объектных базах есть поля типа "массив" и даже можно получить "массив объектов".

Проектировать надо по другому, с учетом таких возможностей.
...
Рейтинг: 0 / 0
02.12.2010, 18:39
    #36991984
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как построить дерево
авторДерево должно бесконечно расширяться во все направления.никак, если операции по нему должны быть эффективными. Но можно реализовать для часных случаев.

авторЕсли же он хочте делать сложные выборки множеств, учитывая иерархические связи то я я не вижу как это реализовать на носкл базах.Можно подумать это можно эффективно реализовать на реляионных базах, боль менее сложная база, и такие запросы положат сервер.
В реляционных точно-также это также можно сделать только для часных случаев.

Типовой граф в документной бд (на пример в mongodb) делается просто, каждый узел содержит список всех парентов, в результате одним запросом вы можете вытащить всю ветку графа, запросом в два слова
Код: plaintext
branch = db.nodes.find({parents: 'branch_root_id'});

Кто-то может привести пример SQL чтобы также вытащить всю ветку в реляционной базе одним запросом (не используя нестандартных фич типа оракловских рекурсий)?
...
Рейтинг: 0 / 0
02.12.2010, 19:21
    #36992051
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как построить дерево
авторникак, если операции по нему должны быть эффективнымив смысле никак в обычных документо-ориентированных, в специальных для графов может можно.
...
Рейтинг: 0 / 0
02.12.2010, 20:59
    #36992166
kixiro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как построить дерево
Спасибо всем за ответы. Обзор на Хабре хороший, про Neo4j ещё не слышал, буду разбираться. Мало знаний как в SQL так и в NOSQL, пойду читать мат. часть, чтобы понять что мне больше подойдет. Не думаю, что в моем проекте данные резко зашкалят за терабайт...... :) но просто та структура данных, которую я задумал, как мне кажется просто не удобно хранить в обычных таблицах, в то же время остановившись на самой простой noSQL базе ( мне первой попалась KyotoCabinet ) можно изобрести ещё один неудобный велосипед...... так что пойду учить... учить... и ещё раз учить.... для прояснения всего спектра возможностей современных баз данных....
...
Рейтинг: 0 / 0
02.12.2010, 21:51
    #36992205
an0nym
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как построить дерево
privateТиповой граф в документной бд (на пример в mongodb) делается просто, каждый узел содержит список всех парентов, в результате одним запросом вы можете вытащить всю ветку графа, запросом в два слова
Код: plaintext
branch = db.nodes.find({parents: 'branch_root_id'});

Кто-то может привести пример SQL чтобы также вытащить всю ветку в реляционной базе одним запросом (не используя нестандартных фич типа оракловских рекурсий)?
Вы будете очень-очень сильно удивлены - в SQL поступают также.
...
Рейтинг: 0 / 0
02.12.2010, 22:54
    #36992261
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как построить дерево
где пример СКЛ кода, как вы запишите всех парентов в одну строчку табицы?
...
Рейтинг: 0 / 0
02.12.2010, 23:12
    #36992273
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как построить дерево
(без использования nested set)
...
Рейтинг: 0 / 0
02.12.2010, 23:44
    #36992300
an0nym
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как построить дерево
private,

а откуда вы знаете, что mongodb пишет тоже в одну строчку? :)
...
Рейтинг: 0 / 0
03.12.2010, 02:22
    #36992376
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как построить дерево
в обектной базе нет строчек, он "пишет" в один из аттрибутов документа (представляющего собой массив), при желании можно также задать индекс и весь граф будет доставаться мгновенно.

потому что я так делал :)
...
Рейтинг: 0 / 0
03.12.2010, 11:45
    #36992899
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как построить дерево
privateгде пример СКЛ кода, как вы запишите всех парентов в одну строчку табицы?

например, можно делать так, я так делал:

1. писать в поле хмл, со всеми парентами
Это в любой реляционной субд и бд.

2. писать массивом, это в некоторых, имеющих такой тип, например в постгресе

Кроме всего эти типы индексируются.

Потом, что означает фраза
"Кто-то может привести пример SQL чтобы также вытащить всю ветку в реляционной базе одним запросом (не используя нестандартных фич типа оракловских рекурсий )?"



в SQL Server тоже есть рекурсии, в постгресе тоже можно красиво оформить выбор.
А то, что вы привели один запрос для выбора всех парентов... вы же помнимаете,
это не аргумент, ну один, а что внутри?
Напишите процедуру в рсубд и вот вам один вызов.
Или используйте возмложности запросов типа with ()..
...
Рейтинг: 0 / 0
03.12.2010, 14:02
    #36993394
private
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как построить дерево
автор1. писать в поле хмл, со всеми парентами
Это в любой реляционной субд и бд.и субд будет парсить хмл и индексировать то что написано внутри? :)

ну понятно что извернуться и написать процедуру или рекурсию типа With можно. Я этим примером хотел показать не то что это невозможно в принципе, а что делается это все через жопу, поскольку реляционная схема плохо подходит для моделирования таких структур (я собств и ждал когда-же кто-то предложит написание процедуры, для этого простого вобщем-то случая связей).

поэтому не нужно писать что "реляционные универсальны", они не уверсальны, просто все привыкли и смирились с их геморроем, поскольку долгое время ничего другого не было. (и не только что касается графов, чего стоят одни только потуги смоделировать наследование, все эти STI и т.п.)
...
Рейтинг: 0 / 0
03.12.2010, 17:38
    #36994233
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как построить дерево
privateавтор1. писать в поле хмл, со всеми парентами
Это в любой реляционной субд и бд.и субд будет парсить хмл и индексировать то что написано внутри? :)

ну понятно что извернуться и написать процедуру или рекурсию типа With можно. Я этим примером хотел показать не то что это невозможно в принципе, а что делается это все через жопу, поскольку реляционная схема плохо подходит для моделирования таких структур (я собств и ждал когда-же кто-то предложит написание процедуры, для этого простого вобщем-то случая связей).

поэтому не нужно писать что "реляционные универсальны", они не уверсальны, просто все привыкли и смирились с их геморроем, поскольку долгое время ничего другого не было. (и не только что касается графов, чего стоят одни только потуги смоделировать наследование, все эти STI и т.п.)

1. если я написал где-то, что рсубд универсальны - покажите. нет, я требую (с)
2. зато я написал что все зависит от задачи, и даже от того, какое дерево будет, т.е количество узлов и т.д.. и предожил варианты навскидку.
Есть еще методы Целко

3. а в чем проблема, если хмл будут индексироваться? я делал эксперименты на деревьях с сотнями тыщ узлов...
...
Рейтинг: 0 / 0
03.12.2010, 17:39
    #36994239
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как построить дерево
и еще одно, ну почему вы думаете, что если это один вызов, то все так просто и хорошо?

branch = db.nodes.find({parents: 'branch_root_id'});

и что? а вставка поддерева в дерево? а удаление? а нахождение по имени?
а апдейт?
...
Рейтинг: 0 / 0
05.12.2010, 14:33
    #36995731
michaeln
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как построить дерево
WinnipuhkixiroКак проще построить взаимосвязь с объектами в noSQL? Требуется хранить данные, связанные между собой по древовидной структуре. Каждый узелок такой структуры хранит несколько параметров(у каждого узелка свой набор), т.е. каждый параметр это свой key - value. Есть ли базы, в которых построение взаимосвязей уже продуманно и это не требуется реализовывать самому? Дерево должно бесконечно расширяться во все направления.

есть, реляционные базы.
Раньше были иерархические.

Но вопрос: может надо определиться вам нужна носкл база или релаяционная и работать с ней.
Не совсем понятно как вы будете эти связи использовать, даже если реализуете, механизм запросов скуден в носкл базах...
А чем это Hive поверх Hbase скуден?
...
Рейтинг: 0 / 0
05.12.2010, 14:42
    #36995739
michaeln
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как построить дерево
kixiroКак проще построить взаимосвязь с объектами в noSQL? Требуется хранить данные, связанные между собой по древовидной структуре. Каждый узелок такой структуры хранит несколько параметров(у каждого узелка свой набор), т.е. каждый параметр это свой key - value. Есть ли базы, в которых построение взаимосвязей уже продуманно и это не требуется реализовывать самому? Дерево должно бесконечно расширяться во все направления.

Могу послать документ постройки иерархии в Hbase
...
Рейтинг: 0 / 0
08.12.2010, 21:26
    #37003229
kixiro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как построить дерево
michaeln, буду очень рад любым примерам :) ( если можно на почту kixiro@gmail.com )
лучше ведь посмотреть как у других это получилось, а потом свое делать....
...
Рейтинг: 0 / 0
08.12.2010, 21:30
    #37003236
kixiro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как построить дерево
Я и не думал, что мой вопрос вызовет такой резонанс.... Наверное выбор между SQL и NOSQL можно делать только после оценки на конкретных объемах и на критичность выполнения трудоемких задач. Системы SQL очень развиты по сравнению NOSQL, но ведь исходя из элементарной логики структуру вида дерева неудобно хранить в таблице :)
...
Рейтинг: 0 / 0
13.12.2010, 11:55
    #37010991
Multy
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как построить дерево
kixiro,

В MS SQL 2008 есть тип hierarchyid специально для хранения деревьев http://habrahabr.ru/blogs/sql/27774/

Возможностей вроде как не мало...
...
Рейтинг: 0 / 0
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / Как построить дерево / 25 сообщений из 34, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]