Подтвердить что ты не робот

Какие факторы следует учитывать при выборе мультимодельной СУБД? (OrientDB против ArangoDB)

Я ищу, чтобы окунуться в мир многомодельных СУБД, у меня нет особых случаев использования, просто хочу начать обучение.

Я обнаружил, что есть два выдающихся - OrientDB vs ArangoDB, но было не удалось найти значимое сравнение unopinionated между ними. Может ли кто-то пролить свет на разницу в функциях между ними и какие-либо оговорки в использовании одного над другим? Если я научусь, я бы мог легко перейти на другой?

(Я отметил FoundationDB, но он является собственностью, и я, вероятно, не буду его рассматривать)

Этот вопрос требует общего сравнения между OrientDB и ArangoDB для тех, кто хочет узнать о многомодельных СУБД, а не ответ о котором лучше.

4b9b3361

Ответ 1

Отказ от ответственности: Я бы больше не рекомендовал OrientDB, см. мои комментарии ниже.


Я могу дать несколько менее предвзятое мнение, используя как ArangoDB, так и OrientDB. Он по-прежнему предвзято, поскольку я являюсь автором драйвера OrientDB node.js - oriento, но у меня нет заинтересованности в либо компания, либо продукт, я только что использовал OrientDB больше.

ArangoDB и OrientDB ориентированы на аналогичный рынок и имеют много общего:

  • Оба являются мультимодельными, вы можете использовать их для хранения документов, графиков и простых ключей/значений.
  • Оба имеют поддержку Gremlin, но он твердо является гражданином второго класса по сравнению с их собственными предпочтительными языками запросов.
  • Оба поддерживают "хранимые процедуры" на стороне сервера в JavaScript. В обеих системах это происходит через немного меньше, чем идиоматический JavaScript API, хотя ArangoDB намного лучше. Это фиксируется в будущей версии OrientDB.
  • Оба предлагают API REST, оба они предназначены для использования в качестве "API-сервера" через обработчики запросов JavaScript. Это намного более практично в ArangoDB, чем OrientDB.
  • Оба распространяются по разрешительной лицензии.
  • Оба являются ACID и имеют поддержку транзакций, но в обеих транзакциях выполняются операции на стороне сервера - они скорее похожи на атомные партии команд, а не на виды транзакций, к которым вы могли бы привыкнуть в традиционной RDBMS.

Однако есть много отличий:

  • ArangoDB не имеет понятия "ссылки", которые являются очень полезной функцией в OrientDB. Они допускают однонаправленные отношения (как гиперссылка в Интернете), без накладных расходов.
  • ArangoDB написан на С++ (и JavaScript), тогда как OrientDB написан на Java. Оба имеют свои преимущества:
    • Будучи написано на С++, 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 поддерживает только очень простой вариант auth.

Обе системы имеют свои преимущества, поэтому выбор между ними сводится к вашей собственной ситуации:

  • Если вы создаете небольшое приложение, и вы являетесь веб-разработчиком, оптимизирующим производительность разработчика, то, вероятно, с ArangoDB будет легче быстро вставать и работать.

  • Если вы создаете более крупное приложение, которое потенциально может хранить много гигабайт или терабайт данных или иметь много тысяч одновременных пользователей или иметь "корпоративные" варианты использования, или нужны мелкозернистые средства контроля безопасности, OrientDB это для вас.

  • Если вы храните RDF или аналогично структурированные связанные данные, выберите OrientDB.

  • Если вы используете Java, просто выберите OrientDB.

Примечание: Это (мое мнение) о состоянии игры сегодня, вещи быстро меняются, и я не буду недооценивать беспощадную эффективность огромной команды за ArangoDB, я просто думаю, что она еще не совсем там:)


Чарльз Пик (codemix.com)