Гость
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / СУБД для хранения графов/матрицы связности / 25 сообщений из 27, страница 1 из 2
17.02.2015, 14:06
    #38881736
Spinifex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СУБД для хранения графов/матрицы связности
Коллеги,
Ищу СУБД для хранения графа. Граф не направленный, не взвешенный, размерность графа не более 100 000 узлов.
По факту нужно хранить матрицу 100 000 на 100 000, где каждый бит указывает на наличие связи. Такую СУБД в принципе не долго и самому написать, но есть проблема, что пользоваться ей должны из нескольких приложений, написанных на разных языках. Так что какое-то готовое решение - предпочтительнее.


Сейчас храним данные в SQL сервер, для каждой связи - запись в таблице. Не устраивает скорость проверки наличия связи и скорость добавления новой связи, размер БД. Очевидно, что в случае с матрицей можно добиться наилучшей производительности.
Есть ли что-то похожее?

P.S. Сейчас смотрю в сторону графовых БД, но насколько понимаю они хранят данные не как матрицу... Могу ошибаться. Также стоит отметить, что у нас нет задач поиска кратчайших путей и т.п., так что этот функционал для нас избыточен.
...
Рейтинг: 0 / 0
17.02.2015, 14:14
    #38881745
GregTk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СУБД для хранения графов/матрицы связности
Spinifex,

Так может в памяти держать если прямо такая простая задача и сделать доступ через REST?
...
Рейтинг: 0 / 0
17.02.2015, 14:23
    #38881761
Spinifex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СУБД для хранения графов/матрицы связности
GregTk,

Да, как вариант, но опять же не верится что нет уже готового решения.
...
Рейтинг: 0 / 0
17.02.2015, 14:30
    #38881771
GregTk
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СУБД для хранения графов/матрицы связности
Spinifex,

А сейчас какие метрики на вставку и на выборку?
...
Рейтинг: 0 / 0
17.02.2015, 15:19
    #38881848
gandjustas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СУБД для хранения графов/матрицы связности
SpinifexКоллеги,
Ищу СУБД для хранения графа. Граф не направленный, не взвешенный, размерность графа не более 100 000 узлов.
По факту нужно хранить матрицу 100 000 на 100 000, где каждый бит указывает на наличие связи. Такую СУБД в принципе не долго и самому написать, но есть проблема, что пользоваться ей должны из нескольких приложений, написанных на разных языках. Так что какое-то готовое решение - предпочтительнее.

1) Зачем именно матрицу?
2) Какие запросы будут?
3) Не проще SQLite с таблицей ребер и индексами?
...
Рейтинг: 0 / 0
17.02.2015, 15:57
    #38881942
Spinifex
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СУБД для хранения графов/матрицы связности
gandjustasSpinifexКоллеги,
Ищу СУБД для хранения графа. Граф не направленный, не взвешенный, размерность графа не более 100 000 узлов.
По факту нужно хранить матрицу 100 000 на 100 000, где каждый бит указывает на наличие связи. Такую СУБД в принципе не долго и самому написать, но есть проблема, что пользоваться ей должны из нескольких приложений, написанных на разных языках. Так что какое-то готовое решение - предпочтительнее.

1) Зачем именно матрицу?
2) Какие запросы будут?
3) Не проще SQLite с таблицей ребер и индексами?

1) В моем представлении это самый эффективный способ из возможных.
2) Запросы очень простые. Проверка существования связи и вставка связи/пачки связей.
3) У нас сейчас так и реализовано (таблица с двумя ID узлов и индексы на ней в обе стороны). Например база с 65 тыс. узлов, где все связанны со всеми занимает порядка 10 Гб. В то время как матрица с битами должна занимать 512 Мб - вполне может поместится в памяти. Да, там можно тип данных для ID узла заменить на tiny int, но все равно матрица будет быстрее. Или вы так не считаете?
...
Рейтинг: 0 / 0
17.02.2015, 23:09
    #38882303
gandjustas
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СУБД для хранения графов/матрицы связности
Spinifexgandjustasпропущено...


1) Зачем именно матрицу?
2) Какие запросы будут?
3) Не проще SQLite с таблицей ребер и индексами?

1) В моем представлении это самый эффективный способ из возможных.
2) Запросы очень простые. Проверка существования связи и вставка связи/пачки связей.
3) У нас сейчас так и реализовано (таблица с двумя ID узлов и индексы на ней в обе стороны). Например база с 65 тыс. узлов, где все связанны со всеми занимает порядка 10 Гб. В то время как матрица с битами должна занимать 512 Мб - вполне может поместится в памяти. Да, там можно тип данных для ID узла заменить на tiny int, но все равно матрица будет быстрее. Или вы так не считаете?

Узлы добавляться не будут? Тогда просто матрицу сериализуйте в файл и все.
Если будут, то никак матрицу хранить не выйдет, придется её восстанавливать из списка смежных вершин (по сути той же таблицы, что у вас).
...
Рейтинг: 0 / 0
18.02.2015, 09:41
    #38882473
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СУБД для хранения графов/матрицы связности
SpinifexGregTk,

Да, как вариант, но опять же не верится что нет уже готового решения.Решения есть, но готовы ли платить и изучать новые технологии?
GregTkSpinifex,

А сейчас какие метрики на вставку и на выборку?Spinifex,

Присоединяюсь к GregTk: всё-таки можно узнать Ваши текущие метрики?

Вот, что получилось у меня:

(CPU: Intel Core i5-2400, HDD: Seagate Barracuda 7200.12)

Создал 65000 записей по 65000 бит в каждой, итого - 4225000000 бит:
  • размер данных = 0.74 Mб (используется автоматическое сжатие битовых строк, поэтому при любом раскладе 4225000000 бит займут менее чем 504 Мб)
  • время заполнения всех бит:
  • ~185 с. (без оптимизаций)
  • ~0.036 с. (с оптимизацией)
  • время считывания всех бит (по одному) = ~111 с.
...
Рейтинг: 0 / 0
19.02.2015, 12:47
    #38883842
DirksDR
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СУБД для хранения графов/матрицы связности
SpinifexСейчас храним данные в SQL сервер, для каждой связи - запись в таблице. Не устраивает скорость проверки наличия связи и скорость добавления новой связи, размер БД.
Насколько хотите увеличить скорость "проверки наличия связи"?
В 2 раза? В 10 раз? В 100 раз? Решения будут разные.
Если в 2 раза, можно таблицу сделать индексной (кластерной в смысле MS SQL) -убираем обращение к области данных таблицы, данные хранятся в структуре индекса.
До 10 раз помогут глобалные массивы (В-деревья) в СУБД Cache или другой "key-value" NoSQL СУБД.
Если в 100 раз, то надо рассматривать in-memory решения, и не обязательно СУБД.

А размер БД почему большой? Сколько записей в таблице? Приведите структуру записи.
...
Рейтинг: 0 / 0
19.02.2015, 13:06
    #38883883
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СУБД для хранения графов/матрицы связности
DirksDRА размер БД почему большой? Сколько записей в таблице? Приведите структуру записи. 17277273
DirksDRНасколько хотите увеличить скорость "проверки наличия связи"?
В 2 раза? В 10 раз? В 100 раз? Решения будут разные.Вы не первый, кто просит ТС показать текущие метрики.
Похоже, ТС уже нашёл решение.
...
Рейтинг: 0 / 0
31.03.2015, 08:27
    #38921846
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СУБД для хранения графов/матрицы связности
Spinifex,

ну у нас например примерно такого же объема матрица тоже лежит в реляционной таблице, никаких проблем нет.

сто тысяч записей не так уж и много...
таблица простая, (ид матрицы, номер строки, номер столбца => значение )
и индексы (ид матрицы, номер строки, номер столбца) и (ид матрицы, номер столбца) - и все будет просто летать .
...
Рейтинг: 0 / 0
31.03.2015, 10:16
    #38921979
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СУБД для хранения графов/матрицы связности
MasterZivсто тысяч записей не так уж и много...ТС жаловался в том числе на размер БД:SpinifexНе устраивает скорость проверки наличия связи и скорость добавления новой связи , размер БД .Сколько у Вас занимает матрица сто тысяч на сто тысяч вместе с индексами, где все связаны со всеми?

MasterZivтаблица простая, (ид матрицы, номер строки, номер столбца => значение )
и индексы (ид матрицы, номер строки, номер столбца) и (ид матрицы, номер столбца) - и все будет просто летать.SpinifexУ нас сейчас так и реализовано (таблица с двумя ID узлов и индексы на ней в обе стороны). Например база с 65 тыс. узлов, где все связанны со всеми занимает порядка 10 Гб. Странно, почему у ТС не летает. Наверное, всё-таки MSSQL и Sybase были по-разному "приготовлены".
...
Рейтинг: 0 / 0
31.03.2015, 11:52
    #38922160
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СУБД для хранения графов/матрицы связности
servitMasterZivсто тысяч записей не так уж и много...ТС жаловался в том числе на размер БД:SpinifexНе устраивает скорость проверки наличия связи и скорость добавления новой связи , размер БД .Сколько у Вас занимает матрица сто тысяч на сто тысяч вместе с индексами, где все связаны со всеми?


у него наверняка разреженная матрица, там не сто тысяч на сто тысяч, т.е. десять миллиардов, а меньше, несколько миллионов.

но лучше конечно у него спросить.

MasterZivтаблица простая, (ид матрицы, номер строки, номер столбца => значение )
и индексы (ид матрицы, номер строки, номер столбца) и (ид матрицы, номер столбца) - и все будет просто летать.SpinifexУ нас сейчас так и реализовано (таблица с двумя ID узлов и индексы на ней в обе стороны). Например база с 65 тыс. узлов, где все связанны со всеми занимает порядка 10 Гб. Странно, почему у ТС не летает. Наверное, всё-таки MSSQL и Sybase были по-разному "приготовлены".

а кто говорил про MSSQL и Sybase ?

хотя на самом деле это все равно, хоть mysql.
...
Рейтинг: 0 / 0
31.03.2015, 12:09
    #38922198
servit
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СУБД для хранения графов/матрицы связности
MasterZivа кто говорил про MSSQL и Sybase ?Про MSSQL - ТСSpinifexСейчас храним данные в SQL сервер, про Sybase - это было моё предположение, исходя из Вашего профиля.

И всё же, каков будет размер БД в Вашей СУБД для озвученных размеров матрицы?
...
Рейтинг: 0 / 0
31.03.2015, 15:40
    #38922716
MasterZiv
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СУБД для хранения графов/матрицы связности
servit про Sybase - это было моё предположение, исходя из Вашего профиля.

Предположение было неверное.
Матрица у меня в БД на Oracle. Но ещё раз -- это всё равно. Там будут незначительные нюансы, но в общем, всё равно.
...
Рейтинг: 0 / 0
06.04.2015, 20:16
    #38928510
GVF112GVF
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СУБД для хранения графов/матрицы связности
Spinifex,

Есть такая база данных Distributed Graph Database Titan -
http://thinkaurelius.github.io/titan/

С уважением,
Вадим.
...
Рейтинг: 0 / 0
07.04.2015, 09:01
    #38928747
Winnipuh
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СУБД для хранения графов/матрицы связности
Neo4j
...
Рейтинг: 0 / 0
20.04.2015, 12:56
    #38940517
anryal
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СУБД для хранения графов/матрицы связности
OrientDB
...
Рейтинг: 0 / 0
Период между сообщениями больше года.
19.06.2018, 10:21
    #39662308
конечно Вася
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СУБД для хранения графов/матрицы связности
WinnipuhNeo4j

Кто-нибудь из русскоговорящих остался в коммньюнити neo4j?
...
Рейтинг: 0 / 0
20.06.2018, 17:15
    #39663188
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СУБД для хранения графов/матрицы связности
SpinifexКоллеги,
Ищу СУБД для хранения графа. Граф не направленный, не взвешенный, размерность графа не более 100 000 узлов.
По факту нужно хранить матрицу 100 000 на 100 000, где каждый бит указывает на наличие связи. Такую СУБД в принципе не долго и самому написать, но есть проблема, что пользоваться ей должны из нескольких приложений, написанных на разных языках. Так что какое-то готовое решение - предпочтительнее.


Сейчас храним данные в SQL сервер, для каждой связи - запись в таблице. Не устраивает скорость проверки наличия связи и скорость добавления новой связи, размер БД. Очевидно, что в случае с матрицей можно добиться наилучшей производительности.
Есть ли что-то похожее?

P.S. Сейчас смотрю в сторону графовых БД, но насколько понимаю они хранят данные не как матрицу... Могу ошибаться. Также стоит отметить, что у нас нет задач поиска кратчайших путей и т.п., так что этот функционал для нас избыточен.

SQL Server 2017?
...
Рейтинг: 0 / 0
21.06.2018, 19:10
    #39663791
Eleanor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СУБД для хранения графов/матрицы связности
Ролг Хупин,

Посмотрела документацию MS по SQL Graph-у - даже там внизу несколько негативных отзывов: MS всего лишь создал "синтаксический сахар" поверх реляционной по сути реализации.
В результате получатся ровно те же таблицы, что у ТС, с похожим размером и похожей производительностью.
...
Рейтинг: 0 / 0
22.06.2018, 11:18
    #39664057
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СУБД для хранения графов/матрицы связности
EleanorРолг Хупин,

Посмотрела документацию MS по SQL Graph-у - даже там внизу несколько негативных отзывов: MS всего лишь создал "синтаксический сахар" поверх реляционной по сути реализации.
В результате получатся ровно те же таблицы, что у ТС, с похожим размером и похожей производительностью.

мэм, что-то я про сахар не нашел там, однако, хорошая фича.
Негативные отзывы будут всегда и обо всём, я, например, могу вам написать десяток матерных негативных отзывов про FTS, и даже для 2017.
...
Рейтинг: 0 / 0
22.06.2018, 13:12
    #39664185
Eleanor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СУБД для хранения графов/матрицы связности
Ролг Хупинчто-то я про сахар не нашел там
I see no section about indexing and why this is better/different from implementing it traditionally. Is this merely syntactic sugar ?

Ролг Хупиноднако, хорошая фича
"Хорошая" - это в текущей версии Sql Server 2017 или в будущем? Уже ей пользовались?

ТС спрашивал про размер и производительность:

- Графы MS пока что используют традиционные таблицы с традиционными индексами.
Если залить данные ТС в граф, то это будут те же таблицы, что у него есть, но с опциями AS NODE и AS EDGE и несколькими скрытыми полям (2 и 8 полей). Объем данных в итоге увеличится.

- Синтаксис MATCH эквивалентен нескольким JOIN, в планах выполнения запросов будут JOIN-ны. Производительность запросов немного выше , т.к. строятся другие планы выполнения.

Возможно, ТС есть смысл перелить данные в граф MS, но лишь потому что он уже хранит их в Sql Server.
...
Рейтинг: 0 / 0
22.06.2018, 14:20
    #39664254
Ролг Хупин
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СУБД для хранения графов/матрицы связности
EleanorРолг Хупинчто-то я про сахар не нашел там
I see no section about indexing and why this is better/different from implementing it traditionally. Is this merely syntactic sugar ?

Ролг Хупиноднако, хорошая фича
"Хорошая" - это в текущей версии Sql Server 2017 или в будущем? Уже ей пользовались?

ТС спрашивал про размер и производительность:

- Графы MS пока что используют традиционные таблицы с традиционными индексами.
Если залить данные ТС в граф, то это будут те же таблицы, что у него есть, но с опциями AS NODE и AS EDGE и несколькими скрытыми полям (2 и 8 полей). Объем данных в итоге увеличится.

- Синтаксис MATCH эквивалентен нескольким JOIN, в планах выполнения запросов будут JOIN-ны. Производительность запросов немного выше , т.к. строятся другие планы выполнения.

Возможно, ТС есть смысл перелить данные в граф MS, но лишь потому что он уже хранит их в Sql Server.

про сахар там вопрос, но в принципе многие возможности в скл сервер можно обозвать сахаром. Да и хранение - в базе, традиционно, но тут нао определиться, а что - это не устраивает?
Они , например, и иерархию сделали через сахар+реализацию, очень неплохо.
...
Рейтинг: 0 / 0
22.06.2018, 15:57
    #39664325
Eleanor
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
СУБД для хранения графов/матрицы связности
Ролг ХупинДа и хранение - в базе, традиционно, но тут надо определиться, а что - это не устраивает?
Они, например, и иерархию сделали через сахар+реализацию, очень неплохо.
Скорее всего пользователи ждали специализированное решение, увидев громкое название Graph Database - высокую производительность, запросы в несколько раз быстрее. Ожидания не оправдались.
10 – 15 percent performance advantage, как в ссылке выше... подозреваю, это не то, на что надеялся ТС.
...
Рейтинг: 0 / 0
Форумы / NoSQL, Big Data [игнор отключен] [закрыт для гостей] / СУБД для хранения графов/матрицы связности / 25 сообщений из 27, страница 1 из 2
Целевая тема:
Создать новую тему:
Автор:
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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