powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Какую БД Использовать?
13 сообщений из 13, страница 1 из 1
Какую БД Использовать?
    #37764412
DizzyBlack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Привет!

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

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



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. На данный момент храню эту структуру в блобе, который при работе приходится целиком загружать в оперативку. Способ хороший и пригодный конечно, быстрый, но в идеале хотелось бы иметь ту же скорость при возможности более гибкой работы с базой...
...
Рейтинг: 0 / 0
Какую БД Использовать?
    #37764423
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DizzyBlackузел 1,1, потом дочерний от него 2,1
.....
для задачи это означает, что после раскрытия 1,1 мы должны увидеть 3,2 и 1,4.

А почему не 2,1?
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Какую БД Использовать?
    #37764437
DizzyBlack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov,

1,1 - 2,1 - это первая цепочка, потом мы добавляем вторую :
2,1 - 1,1 - которая является перестановкой первой

после раскрытия конечного елемента обоих цепочек нужно получить два дочерних узла - 3,2 и 1,4
...
Рейтинг: 0 / 0
Какую БД Использовать?
    #37764456
Злой Бобр
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DizzyBlack,

Собственно без разницы какую БД. Подход в принципе одинаков. Имеем таблицу БД с ИД элементов. Добавляем в нее столбец ИД родителя. Дальше запросом получаем упорядоченные значения с фильтрами или без. А уже как подсунуть готовый результат для визуального отображения зависит от того в чем идет визуализация.
Поэтому определитесь в целом какая БД нужна под ваш проект а потом прикручивайте визуальное отображение структуры. В некоторых БД есть специальные элементы для отображения дерева. Но сути это не меняет. Так что незацикливайтесь на мелочах.
...
Рейтинг: 0 / 0
Какую БД Использовать?
    #37764489
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DizzyBlack,

1 - это воще то не дерево
2. поиск изоморфизмов сложная P задача
...
Рейтинг: 0 / 0
Какую БД Использовать?
    #37764491
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NP
...
Рейтинг: 0 / 0
Какую БД Использовать?
    #37764559
DizzyBlack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ViPRos,

Ну, то что это NP задача понятно. Сформулирую вопрос иначе :
Способ, который я использую для решения сейчас - загрузка всех даных в клиентскую програму в структуру типа:

Код: c#
1.
2.
3.
4.
5.
6.
class Node
{
    Node[] children
    Point coords
    ...
}



То есть обычное дерево. При передвиженни по нем я динамически ищу те самые полиморфизмы (проходом дерева). На моих данных при количестве в 2млн (даже 10млн +) поиск незаметен для пользователя (то есть задержки на глаз не видно). Минус - нужно загружать те самые млн+ узлов в память при старте.

Поэтому инетерсно, можно ли организовать БД такой же структуры, которая обеспечит ту же скорость без загрузки всей инфы в память.
...
Рейтинг: 0 / 0
Какую БД Использовать?
    #37764563
DizzyBlack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DizzyBlack,

Пардон,

Код: c#
1.
2.
3.
4.
5.
6.
7.
class Node
{
    Node[] children
    Node parent
    Point coords
    ...
}
...
Рейтинг: 0 / 0
Какую БД Использовать?
    #37764576
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DizzyBlackПоэтому инетерсно, можно ли организовать БД такой же структуры, которая обеспечит ту же скорость без загрузки всей инфы в память.
нет
...
Рейтинг: 0 / 0
Какую БД Использовать?
    #37764582
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DizzyBlackпри количестве в 2млн (даже 10млн +) поиск незаметен для пользователя...
это пока пользователь вводит парочку скоординированных узлов :)
немног усложни пользовательский граф и попробуй объединить с имеющимся графом, тогда увидишь, заметно или нет :)
...
Рейтинг: 0 / 0
Какую БД Использовать?
    #37764588
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а аще я уже больше 25 лет не работал с сетевыми СУБД и не знаю их возможностей, может и подойдут, а релационки однозначно не для этой задачи
да и задача твоя может не та, что я думаю, может обычные <key, value> СУБД потянут за милую душу
семнатику ты не задал для ясности
...
Рейтинг: 0 / 0
Какую БД Использовать?
    #37764612
DizzyBlack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ViPRosDizzyBlackпри количестве в 2млн (даже 10млн +) поиск незаметен для пользователя...
это пока пользователь вводит парочку скоординированных узлов :)
немног усложни пользовательский граф и попробуй объединить с имеющимся графом, тогда увидишь, заметно или нет :)

Конечно, можно сделать так, что операция займет, кхм, сколько угодно времени :) Просто на реальных даных, обычно, можно сразу отсекать много узлов, ускоряя поиск.


ViPRosDizzyBlackПоэтому инетерсно, можно ли организовать БД такой же структуры, которая обеспечит ту же скорость без загрузки всей инфы в память.
нет

Однозначный ответ :)
Вобщем согласен - считывание из памяти раз в 1000 быстрее считывания с диска - пользователь уснет, если придеться проходить дерево, читая узлы с диска :)
Собственно тогда единственный способ - искать перестановки при добавлении узлов и записывать связи, но страшно представить, как долго оно будет добавлять/удалять 30000+ узлов... Мда, задачка... Кроме загрузки в память ничего то и не придумаешь :)


Ладно, спасибо всем за ответы, когда излагаешь проблему в словах, намного понятней становиться )
...
Рейтинг: 0 / 0
Какую БД Использовать?
    #37764782
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
> а аще я уже больше 25 лет не работал с сетевыми СУБД и не знаю их возможностей,
> может и подойдут, а релационки однозначно не для этой задачи
> да и задача твоя может не та, что я думаю, может обычные <key, value> СУБД
> потянут за милую душу

Да это вообще не для СУБД задача.
Если он сгенерирует все перестановки, СУБД замечательно это сохнанить.
А генерировать -- не для СУБД задача, ни для какой.

Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Какую БД Использовать?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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