powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Проектирование БД [игнор отключен] [закрыт для гостей] / Хранение большого графа
22 сообщений из 22, страница 1 из 1
Хранение большого графа
    #37524344
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Есть граф (10^8 вершин), нужно хранить его в БД, так чтобы можно было достаточно эффективно по нему выполнять его обход, например поиск в ширину с ограничением по глубине. Плюс ежедневно нужно его актуализировать, примерно 10^7 вершин меняют свои атрибуты.
Возможно есть какие то типовые варианты решения подобных задач? Есть ли эффективные решения на базе реляционных СУБД? Почему то кажется, что стандартный подход для графа, хранить в виде двух таблиц вершины+ребра будет слишком медленно. Пока видится какой нибудь NoSQL вариант и каждая вершина хранит ссылки на соседние.
...
Рейтинг: 0 / 0
Хранение большого графа
    #37524408
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirВозможно есть какие то типовые варианты решения подобных задач? Есть ли эффективные
решения на базе реляционных СУБД?

Oracle + таблица рёбер + connect by = решение.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Хранение большого графа
    #37524416
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimir Возможно есть какие то типовые варианты решения подобных задач? http://www.osp.ru/pcworld/2007/03/4199032/
...
Рейтинг: 0 / 0
Хранение большого графа
    #37524625
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovjust_vladimirВозможно есть какие то типовые варианты решения подобных задач? Есть ли эффективные
решения на базе реляционных СУБД?

Oracle + таблица рёбер + connect by = решение.

А как изнутри это работает? Все равно ведь будут join'ы? Надо по экспериментировать, но что то сомневаюсь в производительности (
...
Рейтинг: 0 / 0
Хранение большого графа
    #37524650
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirА как изнутри это работает?
А тебе не пох если ты получаешь нужный результат в приемлемые сроки?..
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Хранение большого графа
    #37524791
Фотография U-gene
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
JOINы JOINам рознь

грят, если JOIN по ключам и/или по индексированным полям, то сильно быстрее
...
Рейтинг: 0 / 0
Хранение большого графа
    #37524819
zeon11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
U-geneJOINы JOINам рознь

грят, если JOIN по ключам и/или по индексированным полям, то сильно быстрее

А чо, кто-то по другому делает?
...
Рейтинг: 0 / 0
Хранение большого графа
    #37524869
Фотография vadiminfo
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry Sibiryakovjust_vladimirВозможно есть какие то типовые варианты решения подобных задач? Есть ли эффективные
решения на базе реляционных СУБД?

Oracle + таблица рёбер + connect by = решение.

Ну все же connect by не для обхода графов вообще, а скорее только для деревьев и лесов. И для обхода, скорей всего, в глубину а не в ширину.
Потому возможно в сложных случаях нужно, возможно, приложить дополнтиельные усилия. В частности в Оракле с 11 версиии, а Скуля и раньше есть рекурсивные запросы. Ну есть у Оракла там всякие дополнительные МД (правда не знаю точно подходят ли какие для графов вообще) ну и ОРМД.
Но все же реляционные БД и даже объектнорекляционные ориентированы на графы в меньшей степени. Если у Вас, например, связано с поиском каких-то решенний типа игры в шахматы, то, возможно, эффективность на базе реляционных нуждается в более тщательных оценках.
...
Рейтинг: 0 / 0
Хранение большого графа
    #37525352
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
vadiminfoНу все же connect by не для обхода графов вообще, а скорее только для деревьев и лесов. И
для обхода, скорей всего, в глубину а не в ширину.

Ну так ТС-у и надо в глубину с ограничением. А для графов в ней есть кляуза no cycle.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Хранение большого графа
    #37525449
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Нет, надо именно в ширину, а по глубине ограничивать только интересующую область поиска, чтобы не перебирать весь граф. Граф с циклами.
ЗЫ: попробовал выполнить самый обычный join на таблице подобного размера, результатов работы не дождался...
...
Рейтинг: 0 / 0
Хранение большого графа
    #37525538
zeon11
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimir....
ЗЫ: попробовал выполнить самый обычный join на таблице подобного размера, результатов работы не дождался...

А полный скриптик JOIN'еных таблиц (таблицы) со всеми причиндалами можно глянуть?
...
Рейтинг: 0 / 0
Хранение большого графа
    #37526168
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimir Плюс ежедневно нужно его актуализировать, примерно 10^7 вершин меняют свои атрибуты. То есть таблица статична, и только раз в день создается новая, а затем переименовывается.
just_vladimir ЗЫ: попробовал выполнить самый обычный join на таблице подобного размера, результатов работы не дождался... Вы просто не умеете их готовить. Или попросили слишком много.

Давайте забудем на секунду, что это граф. У вас есть задача - быстро выполнять определенный тип запросов, и при этом не умирать на остальных запросах и обновлениях. Классическое решение - денормализация, то есть храните то, что потом будет удобно запрашивать.

connect by (или recursive CTE) это тот же самый left join только с неопределенной глубиной. И имеет те же самые недостатки - обход строка за строкой, блок за блоком.
...
Рейтинг: 0 / 0
Хранение большого графа
    #37526184
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257те же самые недостатки - обход строка за строкой, блок за блоком.

Но если учесть, что обходить придётся только соседей заданной вершины, то это будет не так
уж и много. Вряд ли у ТСа граф полносвязный.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Хранение большого графа
    #37526376
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257Давайте забудем на секунду, что это граф. У вас есть задача - быстро выполнять определенный тип запросов, и при этом не умирать на остальных запросах и обновлениях. Классическое решение - денормализация, то есть храните то, что потом будет удобно запрашивать.

Да, нужно именно это, определенный тип запросов к статичной таблице, актуализация происходит в отдельное время от этих запросов, во время актуализации можно выполнять пред подготовку данных. Мне эта пред подготовка видится в хранении сразу вместе с вершиной ребер относящихся к этой вершине, но их количество ведь не постоянно. На сколько накладно хранить их в чем то CLOB'о подобном?
...
Рейтинг: 0 / 0
Хранение большого графа
    #37526405
RXL
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirМне эта пред подготовка видится в хранении сразу вместе с вершиной ребер относящихся к этой вершине, но их количество ведь не постоянно.

Какие критерии требуют такого?
Чем классика не подходит? Попробуйте обосновать.
...
Рейтинг: 0 / 0
Хранение большого графа
    #37526467
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimir На сколько накладно хранить их в чем то CLOB'о подобном? Хранить совершенно не накладно (диски и память сейчас дешевы), а вот насколько накладно обрабатывать это надо посмотреть. Вы статью-то читали?
...
Рейтинг: 0 / 0
Хранение большого графа
    #37526551
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 11/13/2011 06:59 PM, just_vladimir wrote:
> Есть граф (10^8 вершин), нужно хранить его в БД, так чтобы можно было достаточно
> эффективно по нему выполнять его обход, например поиск в ширину с ограничением
> по глубине. Плюс ежедневно нужно его актуализировать, примерно 10^7 вершин

Это получается 100 миллионов вершин ?
А что за задача ? У нас БОЛЬШЕ графы хранятся,
по несколько десятков миллиардов вершин, и ничего.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Хранение большого графа
    #37534732
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SERG1257 Хранить совершенно не накладно (диски и память сейчас дешевы), а вот насколько накладно обрабатывать это надо посмотреть. Вы статью-то читали?
Статью читал. С замечанием согласен, впредь буду более точен в формулировках, нужно именно уметь обрабатывать.

RXLКакие критерии требуют такого?
Чем классика не подходит? Попробуйте обосновать.
Вы о чём вообще? Критерий - производительность. Если при работе с графом всегда нужна информация о соседях вершины, то зачем для этого каждый раз выполнять запрос, когда можно хранить эти данные вместе с самой вершиной? Согласен, что будет дублирование информации, но как тут заметили стоимость дискового пространства в наше время не так уж и высока.


MasterZivЭто получается 100 миллионов вершин ?
А что за задача ? У нас БОЛЬШЕ графы хранятся,
по несколько десятков миллиардов вершин, и ничего.
Да, 100 млн вершин. Подумал на тему, какие могут быть графы и их размеры, вот что получилось:
10^3 - Количество городов в России
10^6 - Количество записей в ЕГРЮЛ
10^8 - Население РФ, Количество пользователей vk.ru
10^9 - Количество пользователей fb, Количество платежей совершаемых в России за год
10^11 - Количество нейронов в мозгу человека.

Что-то Ваша цифра в 10^10 кажется весьма высокой...
...
Рейтинг: 0 / 0
Хранение большого графа
    #37534744
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimirзачем для этого каждый раз выполнять запрос, когда можно хранить эти данные вместе с самой
вершиной?

Затем, что результаты запроса можно обработать в ХП, а парсить клоб - недешёвое удовольствие.
Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
Хранение большого графа
    #37534745
just_vladimir
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovЗатем, что результаты запроса можно обработать в ХП, а парсить клоб - недешёвое удовольствие.

По этому сейчас я экспериментирую с MongoDB.
...
Рейтинг: 0 / 0
Хранение большого графа
    #37534979
SERG1257
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
just_vladimir Критерий - производительность. Если при работе с графом всегда нужна информация о соседях вершины, то зачем для этого каждый раз выполнять запрос, когда можно хранить эти данные вместе с самой вершиной?Давайте опять подальше от вершин ребер и графов и поближе к СУБД. У вас есть запрос (запросы) от прикладной програмы так давайте его и отлаживать.
Клоб (в виде csv) неудобно обрабатывать в SQL, у вас есть соблазн обработать его в прикладной программе навигационно - строчка за строчкой, блок за блоком. Даже если каждая строка обрабатывается быстро (пусть супербыстро в NoSQL), производительность общего запроса не очень, за счет накладных расходов.
Я предлагаю вам подумать над идеальным конечным результатом - запрос от базы -> ответ в виде датасета.
Например хранение материализованных путей (типа файлов в файловой системе) это тоже клоб, но обрабатывается (читается) он один раз и если повезет то по индексу
Код: plaintext
select * from mytable where path like '\usr\bin\%'
...
Рейтинг: 0 / 0
Хранение большого графа
    #37535245
Фотография MasterZiv
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
On 11/19/2011 02:21 PM, just_vladimir wrote:

> 10^9 - Количество пользователей fb, Количество платежей совершаемых в России за год
> 10^11 - Количество нейронов в мозгу человека.
>
> Что-то Ваша цифра в 10^10 кажется весьма высокой...

Потому что там несколько таких "количеств" хранится в одном виде и в одном месте.

http://linkeddata.org/

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


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