Neo4j против ArangoDB при моделировании социальной сети

Я хочу построить социальную сеть. (Например. У людей есть другие люди в качестве друзей), и я думаю, что графическая база данных сделает трюк лучше, чем классическая база данных. Я хотел бы сохранить атрибуты по краям и на узлах. Они могут быть json, но мне все равно, понимает ли DB JSON.

ArangoDB также может хранить документы, а Neo4J - "только" база данных графов.

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

пользователи -[имя пользователя]-> человек
Пользователи - [ID] - > person

и нужно, что есть индекс по краям. Мне не нужна другая база данных, поэтому было бы неплохо сохранить изображение (массив байтов) в базе данных, возможно, даже разные размеры для каждого изображения / видео. Также посты и такие должны храниться в базе данных.

Что я получил, так это то, что Neo4j лучше поддерживает независимый от производства язык запросов, но я думаю, что это проще и лучше изучите стандарт производителя. Какие рекомендации относительно того, какая система управления базами данных лучше подходит? Я буду писать код на Java (и некоторые Scala).

2 ответов


оба ArangoDB и Neo4j способны выполнять работу, которую вы имеете в виду. Оба проекта имеют удивительную документацию и получить ответы на любой из них легко. Оба могут использоваться с Java (хотя Neo4j может быть встроен).

одна вещь, которая может помочь вашему процессу принятия решений, - это признание того, что многие базы данных NoSQL решают гораздо более узкую проблему, чем люди ценят.

Сара Мэй написал эпическое сообщение в блоге о MongoDB, используя пример с некоторыми данными о ТВ-шоу. Из резюме:

идеальный вариант использования MongoDB еще уже, чем наши телевизионные данные. Единственное, что он хорош в хранении произвольных частей JSON.

Я считаю, что Neo4j решает аналогичную узкую проблему, о чем свидетельствует то, как часто используется Neo4j вместе с другие хранилище данных.

Я не знаю, что хранение изображений или видеоданных является отличная идея в ArangoDB или Neo4j. Я бы хотел сохранить его на другом сервере (например, S3) и сохранить url-адрес этого файла в Neo4j/Arango.

а это правда, что можно создавать запросы, на которые может ответить только графическая база данных производительность графической базы данных на любой момент запроса меняется и может дать вам некоторые довольно удивительные результаты. Например, вот документ международного Журнал информатика и Информационные Технологии выполнение сравнения Neo4j против MySQL, Vertica и VoltDB с запросами, которые вы бы предположили, что Neo4j будет потрясающим: Performance comparison

идея заключается в том, что" социальная сеть " автоматически не подразумевает превосходства или даже использования графической базы данных (тем более, что GraphQL и Falcor).

чтобы ответить на ваш вопрос о языках запросов. Нет стандартного языка для графические базы данных.

AQL - это язык запросов, который предоставляет унифицированный интерфейс для работы с данными ключа / значения, документа и графика.

Cypher-это язык запросов графа.

Язык Запросов Badwolf - это язык, вдохновленный SPARQL для временных графов.

эти языки существуют, потому что они решают разные проблемы. Базы данных, которые их поддерживают, также решают различные проблемы.

СУБД Neo4j имеет пример "полиглот настойчивости" на своем сайте:

Using neo4j redis and mongo together

Я думаю это это проблема, которую ArangoDB и AQL должны решить, гипотеза заключается в том, что ее можно решить, не будучи хуже специалистов, таких как Neo4j. Пока что похоже, что они может быть и так.


Я не понимаю, почему вы хотите моделировать имя и идентификатор отдельно от пользователя? Это просто свойства, которые принадлежат Пользователю. Вы предпочитаете модель подключения к другим пользователям, или постов или лайков и т. д. в виде ссылок.

например,.

(:User {name:"Florian",id:12})-[:KNOWS]->(:User {name:"Michael",id:3})

для чего вам нужен индекс отношений? Neo4j не может быть оптимальным для хранения изображений, но люди делали это в прошлом, но видео, к сожалению, нет.

вы можете использовать Neo4j как из Java, так и из Scala, см. http://neo4j.com/developer/language-guides

HTH