|
Как построить дерево
|
|||
---|---|---|---|
#18+
Как проще построить взаимосвязь с объектами в noSQL? Требуется хранить данные, связанные между собой по древовидной структуре. Каждый узелок такой структуры хранит несколько параметров(у каждого узелка свой набор), т.е. каждый параметр это свой key - value. Есть ли базы, в которых построение взаимосвязей уже продуманно и это не требуется реализовывать самому? Дерево должно бесконечно расширяться во все направления. ... |
|||
:
Нравится:
Не нравится:
|
|||
01.12.2010, 22:22 |
|
Как построить дерево
|
|||
---|---|---|---|
#18+
kixiroКак проще построить взаимосвязь с объектами в noSQL? Требуется хранить данные, связанные между собой по древовидной структуре. Каждый узелок такой структуры хранит несколько параметров(у каждого узелка свой набор), т.е. каждый параметр это свой key - value. Есть ли базы, в которых построение взаимосвязей уже продуманно и это не требуется реализовывать самому? Дерево должно бесконечно расширяться во все направления. Все предельно просто - каждый "узелок" хранит ссылку на родителя. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2010, 01:44 |
|
Как построить дерево
|
|||
---|---|---|---|
#18+
kixiro, готовы ли вы под это дерево выделить отдельную базу (насколько это большой и важный кусок приложения)? Почитайте http://habrahabr.ru/blogs/nosql/77909/ . Сам не пробовал, но возможно Neo4J или нечто подобное вам идеально подойдет. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2010, 03:08 |
|
Как построить дерево
|
|||
---|---|---|---|
#18+
kixiroКак проще построить взаимосвязь с объектами в noSQL? Требуется хранить данные, связанные между собой по древовидной структуре. Каждый узелок такой структуры хранит несколько параметров(у каждого узелка свой набор), т.е. каждый параметр это свой key - value. Есть ли базы, в которых построение взаимосвязей уже продуманно и это не требуется реализовывать самому? Дерево должно бесконечно расширяться во все направления. есть, реляционные базы. Раньше были иерархические. Но вопрос: может надо определиться вам нужна носкл база или релаяционная и работать с ней. Не совсем понятно как вы будете эти связи использовать, даже если реализуете, механизм запросов скуден в носкл базах... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2010, 11:51 |
|
Как построить дерево
|
|||
---|---|---|---|
#18+
WinnipuhkixiroКак проще построить взаимосвязь с объектами в noSQL? Требуется хранить данные, связанные между собой по древовидной структуре. Каждый узелок такой структуры хранит несколько параметров(у каждого узелка свой набор), т.е. каждый параметр это свой key - value. Есть ли базы, в которых построение взаимосвязей уже продуманно и это не требуется реализовывать самому? Дерево должно бесконечно расширяться во все направления. есть, реляционные базы. Раньше были иерархические. Но вопрос: может надо определиться вам нужна носкл база или релаяционная и работать с ней. Не совсем понятно как вы будете эти связи использовать, даже если реализуете, механизм запросов скуден в носкл базах... А еще есть базы на графах, документо-ориентированные базы... nosql - это больше, чем key-value. Почитайте выше ссылку, советую. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2010, 11:52 |
|
Как построить дерево
|
|||
---|---|---|---|
#18+
an0nymWinnipuhпропущено... есть, реляционные базы. Раньше были иерархические. Но вопрос: может надо определиться вам нужна носкл база или релаяционная и работать с ней. Не совсем понятно как вы будете эти связи использовать, даже если реализуете, механизм запросов скуден в носкл базах... А еще есть базы на графах, документо-ориентированные базы... nosql - это больше, чем key-value. Почитайте выше ссылку, советую. честно говоря не увидел чего-то такого... чудес не бывает Система ключ/значения сама по себе простая, и не сложная для реализации, но не эффективна, если вы заинтересованы только в запросе или обновлении части данных. Так же трудно реализовать сложные структуры поверх распределенных систем. Кроме того, зачем автору темы хранить иерархию? чтобы выбирать записи одну за другой? тогда - да. Если же он хочте делать сложные выборки множеств, учитывая иерархические связи то я я не вижу как это реализовать на носкл базах. Расскажите... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2010, 13:16 |
|
Как построить дерево
|
|||
---|---|---|---|
#18+
Winnipuhan0nymпропущено... А еще есть базы на графах, документо-ориентированные базы... nosql - это больше, чем key-value. Почитайте выше ссылку, советую. честно говоря не увидел чего-то такого... чудес не бывает Система ключ/значения сама по себе простая, и не сложная для реализации, но не эффективна, если вы заинтересованы только в запросе или обновлении части данных. Так же трудно реализовать сложные структуры поверх распределенных систем. Кроме того, зачем автору темы хранить иерархию? чтобы выбирать записи одну за другой? тогда - да. Если же он хочте делать сложные выборки множеств, учитывая иерархические связи то я я не вижу как это реализовать на носкл базах. Расскажите... Neo4J обладает поистине уникальной моделью данных, храня объекты и связи в качестве узлов и ребер графа. Для запросов, которые соответствуют этой модели (например, иерархических данных) они могут быть в тысячу раз быстрее, чем альтернативные варианты. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2010, 13:17 |
|
Как построить дерево
|
|||
---|---|---|---|
#18+
В объектных базах есть поля типа "массив" и даже можно получить "массив объектов". Проектировать надо по другому, с учетом таких возможностей. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2010, 18:35 |
|
Как построить дерево
|
|||
---|---|---|---|
#18+
авторДерево должно бесконечно расширяться во все направления.никак, если операции по нему должны быть эффективными. Но можно реализовать для часных случаев. авторЕсли же он хочте делать сложные выборки множеств, учитывая иерархические связи то я я не вижу как это реализовать на носкл базах.Можно подумать это можно эффективно реализовать на реляионных базах, боль менее сложная база, и такие запросы положат сервер. В реляционных точно-также это также можно сделать только для часных случаев. Типовой граф в документной бд (на пример в mongodb) делается просто, каждый узел содержит список всех парентов, в результате одним запросом вы можете вытащить всю ветку графа, запросом в два слова Код: plaintext
Кто-то может привести пример SQL чтобы также вытащить всю ветку в реляционной базе одним запросом (не используя нестандартных фич типа оракловских рекурсий)? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2010, 18:39 |
|
Как построить дерево
|
|||
---|---|---|---|
#18+
авторникак, если операции по нему должны быть эффективнымив смысле никак в обычных документо-ориентированных, в специальных для графов может можно. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2010, 19:21 |
|
Как построить дерево
|
|||
---|---|---|---|
#18+
Спасибо всем за ответы. Обзор на Хабре хороший, про Neo4j ещё не слышал, буду разбираться. Мало знаний как в SQL так и в NOSQL, пойду читать мат. часть, чтобы понять что мне больше подойдет. Не думаю, что в моем проекте данные резко зашкалят за терабайт...... :) но просто та структура данных, которую я задумал, как мне кажется просто не удобно хранить в обычных таблицах, в то же время остановившись на самой простой noSQL базе ( мне первой попалась KyotoCabinet ) можно изобрести ещё один неудобный велосипед...... так что пойду учить... учить... и ещё раз учить.... для прояснения всего спектра возможностей современных баз данных.... ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2010, 20:59 |
|
Как построить дерево
|
|||
---|---|---|---|
#18+
privateТиповой граф в документной бд (на пример в mongodb) делается просто, каждый узел содержит список всех парентов, в результате одним запросом вы можете вытащить всю ветку графа, запросом в два слова Код: plaintext
Кто-то может привести пример SQL чтобы также вытащить всю ветку в реляционной базе одним запросом (не используя нестандартных фич типа оракловских рекурсий)? Вы будете очень-очень сильно удивлены - в SQL поступают также. ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2010, 21:51 |
|
Как построить дерево
|
|||
---|---|---|---|
#18+
где пример СКЛ кода, как вы запишите всех парентов в одну строчку табицы? ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2010, 22:54 |
|
Как построить дерево
|
|||
---|---|---|---|
#18+
(без использования nested set) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2010, 23:12 |
|
Как построить дерево
|
|||
---|---|---|---|
#18+
private, а откуда вы знаете, что mongodb пишет тоже в одну строчку? :) ... |
|||
:
Нравится:
Не нравится:
|
|||
02.12.2010, 23:44 |
|
Как построить дерево
|
|||
---|---|---|---|
#18+
в обектной базе нет строчек, он "пишет" в один из аттрибутов документа (представляющего собой массив), при желании можно также задать индекс и весь граф будет доставаться мгновенно. потому что я так делал :) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2010, 02:22 |
|
Как построить дерево
|
|||
---|---|---|---|
#18+
privateгде пример СКЛ кода, как вы запишите всех парентов в одну строчку табицы? например, можно делать так, я так делал: 1. писать в поле хмл, со всеми парентами Это в любой реляционной субд и бд. 2. писать массивом, это в некоторых, имеющих такой тип, например в постгресе Кроме всего эти типы индексируются. Потом, что означает фраза "Кто-то может привести пример SQL чтобы также вытащить всю ветку в реляционной базе одним запросом (не используя нестандартных фич типа оракловских рекурсий )?" в SQL Server тоже есть рекурсии, в постгресе тоже можно красиво оформить выбор. А то, что вы привели один запрос для выбора всех парентов... вы же помнимаете, это не аргумент, ну один, а что внутри? Напишите процедуру в рсубд и вот вам один вызов. Или используйте возмложности запросов типа with ().. ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2010, 11:45 |
|
Как построить дерево
|
|||
---|---|---|---|
#18+
автор1. писать в поле хмл, со всеми парентами Это в любой реляционной субд и бд.и субд будет парсить хмл и индексировать то что написано внутри? :) ну понятно что извернуться и написать процедуру или рекурсию типа With можно. Я этим примером хотел показать не то что это невозможно в принципе, а что делается это все через жопу, поскольку реляционная схема плохо подходит для моделирования таких структур (я собств и ждал когда-же кто-то предложит написание процедуры, для этого простого вобщем-то случая связей). поэтому не нужно писать что "реляционные универсальны", они не уверсальны, просто все привыкли и смирились с их геморроем, поскольку долгое время ничего другого не было. (и не только что касается графов, чего стоят одни только потуги смоделировать наследование, все эти STI и т.п.) ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2010, 14:02 |
|
Как построить дерево
|
|||
---|---|---|---|
#18+
privateавтор1. писать в поле хмл, со всеми парентами Это в любой реляционной субд и бд.и субд будет парсить хмл и индексировать то что написано внутри? :) ну понятно что извернуться и написать процедуру или рекурсию типа With можно. Я этим примером хотел показать не то что это невозможно в принципе, а что делается это все через жопу, поскольку реляционная схема плохо подходит для моделирования таких структур (я собств и ждал когда-же кто-то предложит написание процедуры, для этого простого вобщем-то случая связей). поэтому не нужно писать что "реляционные универсальны", они не уверсальны, просто все привыкли и смирились с их геморроем, поскольку долгое время ничего другого не было. (и не только что касается графов, чего стоят одни только потуги смоделировать наследование, все эти STI и т.п.) 1. если я написал где-то, что рсубд универсальны - покажите. нет, я требую (с) 2. зато я написал что все зависит от задачи, и даже от того, какое дерево будет, т.е количество узлов и т.д.. и предожил варианты навскидку. Есть еще методы Целко 3. а в чем проблема, если хмл будут индексироваться? я делал эксперименты на деревьях с сотнями тыщ узлов... ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2010, 17:38 |
|
Как построить дерево
|
|||
---|---|---|---|
#18+
и еще одно, ну почему вы думаете, что если это один вызов, то все так просто и хорошо? branch = db.nodes.find({parents: 'branch_root_id'}); и что? а вставка поддерева в дерево? а удаление? а нахождение по имени? а апдейт? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2010, 17:39 |
|
Как построить дерево
|
|||
---|---|---|---|
#18+
WinnipuhkixiroКак проще построить взаимосвязь с объектами в noSQL? Требуется хранить данные, связанные между собой по древовидной структуре. Каждый узелок такой структуры хранит несколько параметров(у каждого узелка свой набор), т.е. каждый параметр это свой key - value. Есть ли базы, в которых построение взаимосвязей уже продуманно и это не требуется реализовывать самому? Дерево должно бесконечно расширяться во все направления. есть, реляционные базы. Раньше были иерархические. Но вопрос: может надо определиться вам нужна носкл база или релаяционная и работать с ней. Не совсем понятно как вы будете эти связи использовать, даже если реализуете, механизм запросов скуден в носкл базах... А чем это Hive поверх Hbase скуден? ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2010, 14:33 |
|
Как построить дерево
|
|||
---|---|---|---|
#18+
kixiroКак проще построить взаимосвязь с объектами в noSQL? Требуется хранить данные, связанные между собой по древовидной структуре. Каждый узелок такой структуры хранит несколько параметров(у каждого узелка свой набор), т.е. каждый параметр это свой key - value. Есть ли базы, в которых построение взаимосвязей уже продуманно и это не требуется реализовывать самому? Дерево должно бесконечно расширяться во все направления. Могу послать документ постройки иерархии в Hbase ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2010, 14:42 |
|
Как построить дерево
|
|||
---|---|---|---|
#18+
michaeln, буду очень рад любым примерам :) ( если можно на почту kixiro@gmail.com ) лучше ведь посмотреть как у других это получилось, а потом свое делать.... ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2010, 21:26 |
|
Как построить дерево
|
|||
---|---|---|---|
#18+
Я и не думал, что мой вопрос вызовет такой резонанс.... Наверное выбор между SQL и NOSQL можно делать только после оценки на конкретных объемах и на критичность выполнения трудоемких задач. Системы SQL очень развиты по сравнению NOSQL, но ведь исходя из элементарной логики структуру вида дерева неудобно хранить в таблице :) ... |
|||
:
Нравится:
Не нравится:
|
|||
08.12.2010, 21:30 |
|
Как построить дерево
|
|||
---|---|---|---|
#18+
kixiro, В MS SQL 2008 есть тип hierarchyid специально для хранения деревьев http://habrahabr.ru/blogs/sql/27774/ Возможностей вроде как не мало... ... |
|||
:
Нравится:
Не нравится:
|
|||
13.12.2010, 11:55 |
|
|
start [/forum/topic.php?fid=48&fpage=13&tid=1856991]: |
0ms |
get settings: |
11ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
37ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
57ms |
get tp. blocked users: |
2ms |
others: | 12ms |
total: | 157ms |
0 / 0 |