|
|
|
Какую БД Использовать?
|
|||
|---|---|---|---|
|
#18+
Привет! У меня возникли сложности с тем, как хранить мою структуру даных. Я уже без идей, надеюсь, что может кто-нибудь со свежим взглядом что-нибудь подскажет :) Структура даных для хранения - обычное дерево с неизвестным, но ограниченым количеством дочерних узлов. ai, bi, ci - данные этих узлов (в формате x,y - что, в общем, несущественно). Никаких трудностей с такой структурой не было б, но есть одно но - для этого дерева несущественен порядок этих узлов. Поясню на картинке : Допустим мы добавили в корень дочерний узел 1,1, потом дочерний от него 2,1. Дальше от 2,1 ветвлится еще несколько узлов - 3,2 и 1,4. Теперь мы хотим добавить в корень еще цепочку узлов - 2,1 и 1,1. Несложно увидеть, что мы получили перестановку первой цепочки. Как следствие, для задачи это означает, что после раскрытия 1,1 мы должны увидеть 3,2 и 1,4. Я вижу два возможных решения : - Искать перестановки во время добавления нового узла - Искать их во время раскрывания узла (Предпочтительный вариант) Внимание, вопрос : как реализовать БД, чтоб была возможность создать быструю функцию поиска перестановок? Быстрая, это значит: Пользователь хочет раскрыть узел - получает результат не больше чем за 50мс на 10млн узлах (ну, грубо говоря) P.S. На данный момент храню эту структуру в блобе, который при работе приходится целиком загружать в оперативку. Способ хороший и пригодный конечно, быстрый, но в идеале хотелось бы иметь ту же скорость при возможности более гибкой работы с базой... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2012, 15:07 |
|
||
|
Какую БД Использовать?
|
|||
|---|---|---|---|
|
#18+
DizzyBlackузел 1,1, потом дочерний от него 2,1 ..... для задачи это означает, что после раскрытия 1,1 мы должны увидеть 3,2 и 1,4. А почему не 2,1? Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2012, 15:20 |
|
||
|
Какую БД Использовать?
|
|||
|---|---|---|---|
|
#18+
Dimitry Sibiryakov, 1,1 - 2,1 - это первая цепочка, потом мы добавляем вторую : 2,1 - 1,1 - которая является перестановкой первой после раскрытия конечного елемента обоих цепочек нужно получить два дочерних узла - 3,2 и 1,4 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2012, 15:34 |
|
||
|
Какую БД Использовать?
|
|||
|---|---|---|---|
|
#18+
DizzyBlack, Собственно без разницы какую БД. Подход в принципе одинаков. Имеем таблицу БД с ИД элементов. Добавляем в нее столбец ИД родителя. Дальше запросом получаем упорядоченные значения с фильтрами или без. А уже как подсунуть готовый результат для визуального отображения зависит от того в чем идет визуализация. Поэтому определитесь в целом какая БД нужна под ваш проект а потом прикручивайте визуальное отображение структуры. В некоторых БД есть специальные элементы для отображения дерева. Но сути это не меняет. Так что незацикливайтесь на мелочах. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2012, 15:50 |
|
||
|
Какую БД Использовать?
|
|||
|---|---|---|---|
|
#18+
DizzyBlack, 1 - это воще то не дерево 2. поиск изоморфизмов сложная P задача ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2012, 16:18 |
|
||
|
Какую БД Использовать?
|
|||
|---|---|---|---|
|
#18+
ViPRos, Ну, то что это NP задача понятно. Сформулирую вопрос иначе : Способ, который я использую для решения сейчас - загрузка всех даных в клиентскую програму в структуру типа: Код: c# 1. 2. 3. 4. 5. 6. То есть обычное дерево. При передвиженни по нем я динамически ищу те самые полиморфизмы (проходом дерева). На моих данных при количестве в 2млн (даже 10млн +) поиск незаметен для пользователя (то есть задержки на глаз не видно). Минус - нужно загружать те самые млн+ узлов в память при старте. Поэтому инетерсно, можно ли организовать БД такой же структуры, которая обеспечит ту же скорость без загрузки всей инфы в память. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2012, 17:51 |
|
||
|
Какую БД Использовать?
|
|||
|---|---|---|---|
|
#18+
DizzyBlack, Пардон, Код: c# 1. 2. 3. 4. 5. 6. 7. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2012, 17:52 |
|
||
|
Какую БД Использовать?
|
|||
|---|---|---|---|
|
#18+
DizzyBlackПоэтому инетерсно, можно ли организовать БД такой же структуры, которая обеспечит ту же скорость без загрузки всей инфы в память. нет ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2012, 18:08 |
|
||
|
Какую БД Использовать?
|
|||
|---|---|---|---|
|
#18+
DizzyBlackпри количестве в 2млн (даже 10млн +) поиск незаметен для пользователя... это пока пользователь вводит парочку скоординированных узлов :) немног усложни пользовательский граф и попробуй объединить с имеющимся графом, тогда увидишь, заметно или нет :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2012, 18:14 |
|
||
|
Какую БД Использовать?
|
|||
|---|---|---|---|
|
#18+
а аще я уже больше 25 лет не работал с сетевыми СУБД и не знаю их возможностей, может и подойдут, а релационки однозначно не для этой задачи да и задача твоя может не та, что я думаю, может обычные <key, value> СУБД потянут за милую душу семнатику ты не задал для ясности ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2012, 18:21 |
|
||
|
Какую БД Использовать?
|
|||
|---|---|---|---|
|
#18+
ViPRosDizzyBlackпри количестве в 2млн (даже 10млн +) поиск незаметен для пользователя... это пока пользователь вводит парочку скоординированных узлов :) немног усложни пользовательский граф и попробуй объединить с имеющимся графом, тогда увидишь, заметно или нет :) Конечно, можно сделать так, что операция займет, кхм, сколько угодно времени :) Просто на реальных даных, обычно, можно сразу отсекать много узлов, ускоряя поиск. ViPRosDizzyBlackПоэтому инетерсно, можно ли организовать БД такой же структуры, которая обеспечит ту же скорость без загрузки всей инфы в память. нет Однозначный ответ :) Вобщем согласен - считывание из памяти раз в 1000 быстрее считывания с диска - пользователь уснет, если придеться проходить дерево, читая узлы с диска :) Собственно тогда единственный способ - искать перестановки при добавлении узлов и записывать связи, но страшно представить, как долго оно будет добавлять/удалять 30000+ узлов... Мда, задачка... Кроме загрузки в память ничего то и не придумаешь :) Ладно, спасибо всем за ответы, когда излагаешь проблему в словах, намного понятней становиться ) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2012, 18:47 |
|
||
|
Какую БД Использовать?
|
|||
|---|---|---|---|
|
#18+
> а аще я уже больше 25 лет не работал с сетевыми СУБД и не знаю их возможностей, > может и подойдут, а релационки однозначно не для этой задачи > да и задача твоя может не та, что я думаю, может обычные <key, value> СУБД > потянут за милую душу Да это вообще не для СУБД задача. Если он сгенерирует все перестановки, СУБД замечательно это сохнанить. А генерировать -- не для СУБД задача, ни для какой. Posted via ActualForum NNTP Server 1.5 ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.04.2012, 22:36 |
|
||
|
|

start [/forum/topic.php?fid=32&msg=37764582&tid=1541721]: |
0ms |
get settings: |
9ms |
get forum list: |
13ms |
check forum access: |
3ms |
check topic access: |
3ms |
track hit: |
180ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
48ms |
get tp. blocked users: |
1ms |
| others: | 249ms |
| total: | 516ms |

| 0 / 0 |
