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

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

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

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

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

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

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


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

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

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

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

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

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

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

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

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

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

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

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


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