Какие факторы следует учитывать при выборе мультимодельной СУБД? (OrientDB против ArangoDB)
Я хочу окунуться в мир многомодельных СУБД, у меня нет особых вариантов использования, я просто хочу начать обучение.
Я нахожу, что есть два выдающихся из них - OrientDB против ArangoDB, но не смог найти сколько-нибудь значимого сравнения между ними. Может ли кто-то пролить некоторый свет на разницу в характеристиках между ними и какие-либо предостережения в использовании одного над другим? Если я изучу одно, смогу ли я легко перейти к другому?
(Я также пометил FoundationDB, но он проприетарный, и, вероятно, я его не рассмотрю)
Этот вопрос требует общегосравнения между OrientDB и ArangoDB для кого-то, желающего узнать о многомодельных СУБД, а не самоуверенного ответа о том, что лучше.
1 ответ
Отказ от ответственности: я бы больше не рекомендовал OrientDB, см. Мои комментарии ниже.
Я могу представить немного менее предвзятое мнение, используя как ArangoDB, так и OrientDB. Это по-прежнему предвзято, так как я являюсь автором драйвера OrientDB для node.js - Ориентино, но у меня нет особого интереса ни к компании, ни к продукту, я просто обязательнобольше использую OrientDB.
ArangoDB и OrientDB нацелены на один и тот же рынок и имеют много общего:
- Оба являются мультимодельными, вы можете использовать их для хранения документов, графиков и простых ключей / значений.
- Оба имеют поддержку Gremlin, но это твердо гражданин второго сорта по сравнению с их предпочитаемыми языками запросов.
- Оба поддерживают серверные "хранимые процедуры" в JavaScript. В обеих системах это происходит через немного идиоматический JavaScript API, хотя ArangoDB намного лучше. Это будет исправлено в следующей версии OrientDB.
- Оба предлагают REST API, оба предназначены для использования в качестве "API-сервера" через обработчики запросов JavaScript. Это гораздо более практично в ArangoDB, чем в OrientDB.
- Оба распространяются по разрешительной лицензии.
- Оба являются ACID и имеют поддержку транзакций, но в обеих транзакциях это операции на стороне сервера - они больше похожи на атомарные пакеты команд, а не на типы транзакций, которые вы могли бы использовать в традиционной СУБД.
Тем не менее, есть много различий:
- В ArangoDB нет понятия "ссылки", что очень полезно в OrientDB. Они допускают однонаправленные отношения (как гиперссылка в сети) без лишних затрат на ребра.
- ArangoDB написан на C++ (и JavaScript), тогда как OrientDB написан на Java. Оба имеют свои преимущества:
- Быть написанным на C++ означает, что ArangoDB использует V8, тот же высокопроизводительный движок JavaScript, который поддерживает node.js и Google Chrome. Принимая во внимание то, что написано на Java, OrientDB использует Nashorn, который по-прежнему быстр, но не самый быстрый. Это означает, что ArangoDB может предложить более высокий уровень совместимости с экосистемой node.js по сравнению с OrientDB.
- Быть написанным на Java означает, что OrientDB работает на большем количестве платформ, включая, например, Raspberry PI. Это также означает, что OrientDB может использовать множество других технологий, написанных на Java, например, OrientDB имеет превосходную поддержку полнотекстового / геопространственного поиска через Lucene, которая недоступна для ArangoDB.
- OrientDB использует диалект SQL в качестве языка запросов, тогда как ArangoDB использует свой собственный язык под названием AQL. Теоретически AQL лучше, потому что он разработан специально для этой проблемы, но на практике он очень похож на SQL, но с другими ключевыми словами и является еще одним языком для изучения, в то время как реализация OrientDB выглядит намного удобнее, если вы привыкли к SQL, SQL является декларативным, тогда как AQL является обязательным - YMMV здесь.
- ArangoDB - это база данных, состоящая в основном из памяти, она лучше всего работает, когда большая часть ваших данных помещается в оперативную память. Это может или не может подходить для ваших нужд. OrientDB не имеет этого ограничения (но также любит оперативную память).
- OrientDB полностью объектно-ориентирован - он поддерживает классы со свойствами и наследованием. Это исключительно полезно, потому что это означает, что ваша структура базы данных может отображать 1-1 на структуру вашего приложения, без необходимости в уродливых хакерских атаках, таких как ActiveRecord. ArangoDB поддерживает нечто похожее через модели в Foxx, но это больше похоже на дополнительный аддон, а не на основную часть работы базы данных.
- ArangoDB предлагает большую гибкость с помощью Foxx, но он не был разработан людьми с сильным JS-опытом на стороне сервера и часто изобретает колесо. Вместо того, чтобы использовать фреймворки, такие как express, для обработки своих запросов, они создали свой собственный клон Sinatra, который, конечно, делает его почти таким же, как express (express также клон Sinatra), но слегка отличается, и означает, что ни одно из промежуточного ПО или плагины могут быть использованы повторно. Точно так же они встраивают V8, но не libuv, что означает, что они не предлагают те же неблокирующие API, что и node.js, и поэтому пользователи не могут быть уверены в том, что данный модуль npm будет работать там. Это означает, что нетривиальные приложения не могут использовать ArangoDB в качестве замены для бэкэнда, что сводит на нет большую потенциальную полезность Foxx.
- OrientDB поддерживает индексы уровня свойств первого уровня и индексы уровня базы данных. Вы можете запрашивать и вставлять в конкретные индексы напрямую для максимальной эффективности. Я не видел поддержки этому в ArangoDB.
- OrientDB является более устоявшимся вариантом для многих известных пользователей. ArangoDB более новый, менее известный, но быстро растущий.
- Документация ArangoDB превосходна, и они предлагают официальные драйверы для разных языков программирования. Документация OrientDB не так хороша, и, хотя есть драйверы для большинства платформ, они работают на уровне сообщества и, следовательно, не всегда обновляются с помощью новейших функций OrientDB.
- Если вы используете Java (или мост Java), вы можете встроить OrientDB непосредственно в свое приложение, в виде библиотеки. Этот вариант использования невозможен в ArangoDB.
- OrientDB имеет концепцию пользователей и ролей, а также уровень безопасности записи. Это может быть убийственной функцией для вас, это для меня. Он также поддерживает аутентификацию на основе токенов, поэтому можно использовать OrientDB в качестве основного средства авторизации / аутентификации пользователей. OrientDB также имеет интеграцию LDAP. Напротив, ArangoDB поддерживает только очень простой вариант аутентификации.
Обе системы имеют свои преимущества, поэтому выбор между ними сводится к вашей собственной ситуации:
Если вы создаете небольшое приложение, и вы являетесь веб-разработчиком, оптимизирующим производительность разработчиков, вам, вероятно, будет проще быстро приступить к работе с ArangoDB.
Если вы создаете более крупное приложение, которое потенциально может хранить много гигабайт или терабайт данных, или иметь много тысяч одновременно работающих пользователей, или иметь "корпоративные" варианты использования, или вам нужны детальные элементы управления безопасностью, OrientDB - это то, что вам нужно.
Если вы храните RDF или аналогично структурированные связанные данные, выберите OrientDB.
Если вы используете Java, просто выберите OrientDB.
Примечание: это (мое мнение) состояние дел сегодня, все быстро меняется, и я не стал бы недооценивать безжалостную эффективность потрясающей команды, стоящей за ArangoDB, я просто думаю, что это еще не совсем:)
Чарльз Пик (codemix.com)