Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Динамический граф / 24 сообщений из 24, страница 1 из 1
25.10.2009, 00:16
    #36270842
Daffy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический граф
Привет всем!

Делаю веб-проектик для себя на связке PHP+Mysql. В основе - динамический граф. Необходимо искать всевозможные пути и кратчайшее расстояние между двумя узлами. Смущает то, что для поиска приходится постоянно доставать из бд целиком весь граф (и алгоритмом Дейкстры искать). Со скоростью выборки графа пока проблем нет, потому как граф с малым количеством узлов .

По ходу разработки возникают вопросы:

1. Оптимально ли вообще на стороне клиента (языка программирования) работать с графом у которого большое количество узлов (например миллион) или лучше делать весь поиск на уровне хранимых функций/процедур СУБД?

2. Существуют ли более эффективные/оптимальные средства/подходы для работы с графами? (сайтец на начальном этапе разработки, поэтому могу экспериментировать)


Уважаемы специалисты, помогите, пожалуйста, разобраться.

p/s: По совету на хpoint, читаю "Кристофидес Н. Теория графов. Алгоритмический подход." Хотелось бы услышать еще мнения, по этому поводу.
...
Рейтинг: 0 / 0
26.10.2009, 20:12
    #36273425
Мимопроходящий
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический граф
fedd, привет!

--
With best regards, Мимопроходящий.

Posted via ActualForum NNTP Server 1.4
...
Рейтинг: 0 / 0
29.10.2009, 13:07
    #36279379
ОКТОГЕН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический граф
Daffy, Вряд ли можно получить высокую скорость за счёт использования ХП, особенно, на
задачах типа полного обхода графа. Да и процедурный язык у мускуля весьма убогий.
На миллионе узлов, мне кажется мускуль умрёт или будет очень долго работать.
Но если вас не смущает ожидание в течении нескольких минут в случае больших графов,
то я думаю, можете попробовать.
Ещё зависит от способа хранения. Как вы храните этот граф?
...
Рейтинг: 0 / 0
29.10.2009, 22:01
    #36281074
Daffy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический граф
ОКТОГЕН,
Спасибо, что ответили.

Выбирал между несколькими вариантами хранения древовидных структур:

Adjacency List Tree Structure
Nested Set Tree Structure
Materialized Path Tree


Остановился, на таком простеньком варианте:

Табличка объектов(вершин) Objects
idname1 Узел 12 Узел 23 Узел 3

И табличка связей между вершинами - Relations
parent child1 21 3

Есть, еще таблички - для кеширования результата поиска, которые периодично обновляются.
Несколько минут - это многовато для веба, идея то для сайта. Пока весь граф выбираю итеративно, но в последствии хочу добавиться табличку RelationsMap, хранящую все пути между любыми связанными узлами ( карта путей узлов), для того чтобы весь граф можно было "выбрать" одним запросом. Плохо только то, что избыточность будет большая.

Как я понял реляционные бд, не совсем удобны для работы со сложными графами.
А в какую сторону тогда смотреть? Просто в сети мало информации, по работе с графами.
...
Рейтинг: 0 / 0
29.10.2009, 22:02
    #36281077
Daffy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический граф
Мимопроходящий
fedd, привет!

--
With best regards, Мимопроходящий.




Привет!!! Тока я не fedd :)
...
Рейтинг: 0 / 0
30.10.2009, 09:27
    #36281470
Senya_L
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический граф
DaffyПока весь граф выбираю итеративно, но в последствии хочу добавиться табличку RelationsMap, хранящую все пути между любыми связанными узлами ( карта путей узлов), для того чтобы весь граф можно было "выбрать" одним запросом. Плохо только то, что избыточность будет большая.Что-то мне непонятно назначение RelationsMap. Граф можно и так выбрать двумя запросами
Код: plaintext
select * from Objects
Код: plaintext
select * from Relations
Другое дело, что может погибнуть клиент, расставляя дуги между лимоном вершин. Хотя если использовать нормальные коллекции с быстрым поиском, то все будет нормально.
...
Рейтинг: 0 / 0
30.10.2009, 13:11
    #36282155
alecsey
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический граф
ОКТОГЕНDaffy, Вряд ли можно получить высокую скорость за счёт использования ХПога, тянуть милион строк на клиента это конечно очень быстро
...
Рейтинг: 0 / 0
30.10.2009, 14:40
    #36282464
ОКТОГЕН
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический граф
alecsey, я хотел сказать, что перебирать миллионные графы занятие тоскливое по любому.
Экономия на трафике в ХП уменьшит сетевой трафик, но эта ХП будет тяжёлая.
...
Рейтинг: 0 / 0
30.10.2009, 19:01
    #36283103
Daffy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический граф
Senya_LDaffyПока весь граф выбираю итеративно, но в последствии хочу добавиться табличку RelationsMap, хранящую все пути между любыми связанными узлами ( карта путей узлов), для того чтобы весь граф можно было "выбрать" одним запросом. Плохо только то, что избыточность будет большая.Что-то мне непонятно назначение RelationsMap. Граф можно и так выбрать двумя запросами
Код: plaintext
select * from Objects
Код: plaintext
select * from Relations
Другое дело, что может погибнуть клиент, расставляя дуги между лимоном вершин. Хотя если использовать нормальные коллекции с быстрым поиском, то все будет нормально.

В том-то и дело, что дуги расставляю на уровне БД и на клиенте уже осуществляю поиск.
Mysql не поддерживает иерархические запросы, с помощью таблицы RelationsMap хочу попытаться компенсировать это.
...
Рейтинг: 0 / 0
30.10.2009, 19:03
    #36283107
Daffy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический граф
Senya_L,

авторХотя если использовать нормальные коллекции с быстрым поиском, то все будет нормально.

Поясните, пожалуйста, насчет коллекций. Пока не понимаю о чем идет речь.
...
Рейтинг: 0 / 0
30.10.2009, 19:08
    #36283111
Daffy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический граф
Так как идея на стадии разработки, могу к Mysql не привязываться, а использовать другие средства/подходы.
...
Рейтинг: 0 / 0
30.10.2009, 21:02
    #36283254
DPH3
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический граф
Если граф большой, а работать с ним нужно быстро, то СУБД, скорее всего, не подойдет, увы.

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

Если же хочется логику оставить в БД, то стоит поглядеть на бесплатные БД с хорошим SQLем (ну, я традиционно рекомендую DB2 Express C, там с деревьями все хорошо, но может быть подойдет и что-нибудь еще).

Вообще, про то, как работать с большими графами был доклад на последнем Highload++ - включая распределение графа на несколько серверов и т.п.
...
Рейтинг: 0 / 0
30.10.2009, 23:28
    #36283387
Daffy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический граф
DPH3Если граф большой, а работать с ним нужно быстро, то СУБД, скорее всего, не подойдет, увы.

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

Если же хочется логику оставить в БД, то стоит поглядеть на бесплатные БД с хорошим SQLем (ну, я традиционно рекомендую DB2 Express C, там с деревьями все хорошо, но может быть подойдет и что-нибудь еще).

Вообще, про то, как работать с большими графами был доклад на последнем Highload++ - включая распределение графа на несколько серверов и т.п.

Спасибо большое за наводку - буду копать!
...
Рейтинг: 0 / 0
30.10.2009, 23:43
    #36283394
Daffy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический граф
DPH3,
автор
Если же хочется логику оставить в БД, то стоит поглядеть на бесплатные БД с хорошим SQLем (ну, я традиционно рекомендую DB2 Express C, там с деревьями все хорошо, но может быть подойдет и что-нибудь еще).


У меня вся основная работа происходить будет с графом, а в перспективе он может расти, да и функционал по работе с графом - расширяться. Как раз скорость работы очень важна. И если, действительно, СУБД не подходят под эту "планку", то откажусь от них.
А DB2 Express C обязательно, для общего развития - гляну. Спасибо!
...
Рейтинг: 0 / 0
31.10.2009, 14:54
    #36283762
DPH3
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический граф
Daffy
а в перспективе он может расти, да и функционал по работе с графом - расширяться. Как раз скорость работы очень важна.
А какие оценки требований к производительности и объему на ближайшие, ну, скажем, два года?
А то "скорость работы очень важна" может пониматься очень по разному

(Я видел ТЗ, где очень хотели высокую скоростью работы под большими нагрузками. После уточнения постановки выяснилось, что нужно порядка 100 пользователей (и запрос раз в минуту) при скорости реакции порядка 10 секунд. Для обычного корпоративного портала :)
...
Рейтинг: 0 / 0
31.10.2009, 20:57
    #36284002
Daffy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический граф
DPH3,

Собственно весь проект делается мной ради "спортивного" интереса (стартап). Это будет портал с элементами социальной сети. За 2 года, надеюсь, наберется аудитории 1000 - 1500 человек. Точное количество запросов, затрудняюсь сказать, потому как не знаю насколько активно будут юзать сайт. Высокая скоростью работы важна (особенно если проект будет пользоваться интересом), приятно когда интерфейс реагирует на действия пользователя максимально быстро. Так как основная идея завязана на графе (поиск, добавление вершин, удаление вершин, объедение подграфов, выборка, модификация элементов графа), хочется подобрать средства/методы для этой задачи, чтобы в последствии можно было максимально безболезненно масштабировать систему и т.д.

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

Подскажите пожалуйста, что такое ApplicationLayer ??? В сети нахожу разные трактовки.
...
Рейтинг: 0 / 0
31.10.2009, 22:32
    #36284067
Daffy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический граф
DPH3,

авторВообще, про то, как работать с большими графами был доклад на последнем Highload++ - включая распределение графа на несколько серверов и т.п.

http://highload.ru/papers2009/12480.html

Вот об этом докладе идет речь?
...
Рейтинг: 0 / 0
03.11.2009, 16:40
    #36288910
fedd
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический граф
DaffyМимопроходящий
fedd, привет!

--
With best regards, Мимопроходящий.




Привет!!! Тока я не fedd :)+1

хотя топик интересный :)
...
Рейтинг: 0 / 0
06.11.2009, 21:50
    #36295864
Alexander Ryndin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический граф
DaffyDPH3,
автор
Если же хочется логику оставить в БД, то стоит поглядеть на бесплатные БД с хорошим SQLем (ну, я традиционно рекомендую DB2 Express C, там с деревьями все хорошо, но может быть подойдет и что-нибудь еще).


У меня вся основная работа происходить будет с графом, а в перспективе он может расти, да и функционал по работе с графом - расширяться. Как раз скорость работы очень важна. И если, действительно, СУБД не подходят под эту "планку", то откажусь от них.
А DB2 Express C обязательно, для общего развития - гляну. Спасибо!
ну почему же СУБД не подходят? ;) Все прекрасно подходит. Только смотреть нужно в сторону Oracle Spatial. Там тебе и все эти алгоритмы реализованы, и динамическая загрузка графов, и анализ прямо в базе...
...
Рейтинг: 0 / 0
06.11.2009, 23:24
    #36295949
DPH3
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический граф
DaffyDPH3,

авторВообще, про то, как работать с большими графами был доклад на последнем Highload++ - включая распределение графа на несколько серверов и т.п.

http://highload.ru/papers2009/12480.html

Вот об этом докладе идет речь?

Да.
Хотя при ваших объемах и задачах можно обойтись и более простыми решениями. Собственно, почти любыми (граф в простой БД, граф целиком в памяти, загружается при рестарте и т.д.). Проблемы начинаются, когда пользователей десятки-сотни тысяч и все приходят каждый день :)

Все-таки, для облегчения разработки, рекомендую граф целиком загружать в память (гм, не помню, как там у PHP с разделяемой между сессиями памятью? Но какое-то решение точно должно быть) и уже в памяти с ним работать так, как удобнее.

Все остальное для ваших задач, насколько я могу судить, излишнее :)
...
Рейтинг: 0 / 0
07.11.2009, 02:24
    #36296110
strizh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический граф
To Daffy
тынц
народ правильно советует - MySQL - фтопку.
...
Рейтинг: 0 / 0
07.11.2009, 19:21
    #36296636
Daffy
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический граф
DPH3, strizh . Спасибо большое!

В памяти работать с графом, действительно шустро. Только в этом убедился поюзав key-value хранилище Redis. Саму работу с графом - перенесу на СИ. И этого функционала с головой хватит.
Ставлю сейчас Ubuntu Linux , чтобы для разнообразия потестить: Tokyo Cabine/Tokyo Tyrant, BerkeleyDB/MemcacheDB, MongoDB. Единственное, немного смущает, что проекты 'свежие' и первые версии падали(речь о MongoDB и Redis) . Собственно к хранилищам присмотрелся из-за "легкости" горизонтальной масштабируемости, да еще благодаря отсутствию SQL (парсить ничего не нужно) скорость выборок в разы выше того же Mysql.Так как проект тестовый и не коммерческий, интересно обкатать новые технологии.

Возможно кто-то уже пользовался перечисленными хранилищами поделитесь, пожалуйста, насколько стабильно они себя ведут при больших объемах инфы в бд ???

Alexander Ryndin , Спасибо! Про Oracle Spatial даже не слышал. Погуглю о нем.
...
Рейтинг: 0 / 0
20.11.2009, 14:23
    #36322367
DocAl
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический граф
В MySQL, кстати, тоже есть Spatial Extension. На первый взгляд, может подойти, но сам не пользовался. Если попробуете -- сообщите о результатах, пожалуйста.
...
Рейтинг: 0 / 0
20.11.2009, 14:56
    #36322478
Alexander Ryndin
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Динамический граф
DocAl,

в MySQL этой функциональности нет. ее также нет в MSSQL.
гуглить тоже не стоит - все то нужно есть вот здесь Oracle Network Data Model
...
Рейтинг: 0 / 0
Форумы / Сравнение СУБД [игнор отключен] [закрыт для гостей] / Динамический граф / 24 сообщений из 24, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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