База данных документов ArangoDB, а также графическая база данных? Как это возможно?

Кто-то может объяснить, как база данных документов работает как графовая база данных?

В чем разница между ArangoDB и Neo4j?

1 ответ

Отказ от ответственности: я Макс из ArangoDB, одного из разработчиков ядра.

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

(1) Хранить граф в хранилище документов относительно просто (как в реляционной базе данных), например, можно просто сохранить документ для каждой вершины в "коллекции вершин" и документ для каждого ребра в " край сбор". Нужно только убедиться, что каждое ребро запоминает, из какой вершины оно идет и в какую вершину оно идет. Для этого в ArangoDB мы используем атрибуты _from и _to в пограничном документе.

Однако критическая возможность для графовой базы данных состоит в том, что она должна эффективно отвечать на запросы о графах. Типичные запросы для графов: (а) "каковы соседи вершины в графе?" или (б) "каков кратчайший путь от вершины A к вершине B в графе?" или (c) "дайте мне все вершины, которые я могу достичь из вершины A, следуя ребрам". Принимая во внимание, что (a) просто нужен хороший индекс для набора ребер, (b) и (c) включает априори неизвестное число шагов в графе. Следовательно, (b) и (c) не может быть эффективно выполнено с традиционными языками запросов к базе данных, такими как SQL, просто потому, что они предполагают большой объем связи между клиентом и сервером или, по крайней мере, очень сложное выражение с переменным числом присоединяется. Поэтому я называю запросы типа (b) и (c) "графикой", не определяя это строго.

Поэтому мой короткий ответ на вопрос "как хранилище документов может быть графовой базой данных?" is: Храните график, как указано выше, и реализуйте графические запросы на сервере базы данных, доступном на языке запросов хранилища данных. В принципе, то же самое можно сделать с реляционной базой данных и некоторыми существенными расширениями SQL.

С ArangoDB нам удалось объединить документ, график и функции ключ / значение в единый, согласованный язык запросов. Поэтому мы называем ArangoDB "многомодельной базой данных", поскольку она объединяет эти три модели данных без проблем. Вы даже можете смешать модели данных в одном запросе!

Это приводит к моему ответу на вопрос (2), который, очевидно, немного смещен:

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

Neo4j написан на Java, ArangoDB написан на C++ и встраивает Google V8 для выполнения расширений JavaScript.

Для сравнения производительности смотрите этот пост.

Другие вопросы по тегам