web-dev-qa-db-ja.com

マルチモデルDBMSを選択する際に考慮すべき要素は何ですか? (OrientDBとArangoDB)

マルチモデルDBMSの世界に手を浸したいと思っています。特に使用例はなく、学び始めたいだけです。

2つの顕著なものがあることがわかりました OrientDB vs ArangoDB ですが、 意味のある 比較、 非ピニオン を見つけることができませんでした=それらの間。誰かが2つの間のfeaturesの違い、および一方を他方の上に使用する際の警告に光を当てることができますか?片方を学べば、もう片方に簡単に移行できますか?

(私は FoundationDB にもタグを付けましたが、それは独占的であり、おそらくそれを考慮しません)

この質問は、一般的な比較 OrientDBとArangoDBの比較学びたい人のためにマルチモデルDBMSについて、そしてないどちらが良いかについての意見のある答え。

29
dayuloli

免責事項:OrientDBは推奨しなくなりました。以下のコメントを参照してください。


ArangoDBとOrientDBの両方を使用したので、少し偏りの少ない意見を提供できます。私はOrientDBのnode.jsドライバーの作成者であるため、まだ偏っています- oriento しかし、会社にも製品にも既得権はありません。私は必ずしもOrientDBを使用していますmore

ArangoDBとOrientDBはどちらも同様の市場をターゲットにしており、多くの類似点があります。

  1. どちらもマルチモデルであり、ドキュメント、グラフ、単純なキー/値を保存するために使用できます。
  2. どちらも Gremlin をサポートしていますが、独自の優先クエリ言語と比較すると、間違いなく二級市民です。
  3. どちらもJavaScriptでサーバー側の「ストアドプロシージャ」をサポートしています。どちらのシステムでも、これは慣用的なJavaScript APIよりもわずかに少ないものですが、ArangoDBの方がはるかに優れています。これは、OrientDBの次のバージョンで修正されています。
  4. どちらもREST APIを提供し、どちらもJavaScriptリクエストハンドラーを介して「APIサーバー」として使用できるようにすることを目的としています。これは、OrientDBよりもArangoDBではるかに実用的です。
  5. どちらもパーミッシブライセンスの下で配布されます。
  6. どちらもACIDであり、トランザクションをサポートしていますが、どちらのトランザクションもサーバー側の操作です。従来のRDBMSで使用されていた種類のトランザクションというよりは、コマンドのアトミックバッチに似ています。

ただし、多くの違いがあります。

  1. ArangoDBには、OrientDBの非常に便利な機能である「リンク」の概念がありません。それらは、エッジのオーバーヘッドなしに、(Web上のハイパーリンクのように)一方向の関係を可能にします。
  2. ArangoDBはC++(およびJavaScript)で記述されていますが、OrientDBはJavaで記述されています。どちらにも利点があります:
    • C++で記述されているということは、ArangoDBがV8を使用していることを意味します。これは、node.jsとGoogleChromeを強化するのと同じ高性能JavaScriptエンジンです。 Javaで記述されている場合、OrientDBはNashornを使用しますが、これはまだ高速ですが、最速ではありません。これは、ArangoDBがOrientDBと比較してnode.jsエコシステムとの互換性を高めることができることを意味します。
    • Javaで記述されているということは、OrientDBがRaspberry Piなど、より多くのプラットフォームで実行されることを意味します。また、OrientDBは、Javaで記述された他の多くのテクノロジーを活用できることを意味します。たとえば、OrientDBは優れたフルテキスト/地理空間を備えています。 Luceneを介した検索サポート。これはArangoDBでは利用できません。
  3. OrientDBはクエリ言語としてSQLの方言を使用しますが、ArangoDBはAQLと呼ばれる独自のカスタム言語を使用します。理論的には、AQLは問題のために明示的に設計されているため、実際にはSQLに非常に似ていますが、キーワードが異なり、学習する別の言語ですが、OrientDBの実装はSQLに慣れている場合ははるかに快適です。 。 SQLは宣言型ですが、AQLは必須です-ここではYMMVです。
  4. ArangoDBは「ほとんどメモリ」のデータベースであり、ほとんどのデータがRAMに収まる場合に最適に機能します。これは、ニーズに適している場合とそうでない場合があります。 OrientDBにはこの制限はありません(RAMも大好きです)。
  5. OrientDBは完全にオブジェクト指向であり、プロパティと継承を持つクラスをサポートします。これは、ActiveRecordのような醜いハックを必要とせずに、データベース構造をアプリケーション構造に1-1でマップできることを意味するため、非常に便利です。 ArangoDBは、Foxxのモデルを介してかなり類似したものをサポートしますが、データベースの動作のコア部分というよりは、オプションのアドオンのようなものです。
  6. ArangoDBは、 Foxx を介して多くの柔軟性を提供しますが、サーバー側のJSのバックグラウンドが強い人々によって設計されたものではなく、多くの場合、車輪を再発明します。 express のようなフレームワークをリクエスト処理に利用するのではなく、 Sinatra の独自のクローンを作成しました。これにより、もちろん、expressとほぼ同じになります(expressもSinatraクローンです)。 )、ただし微妙に異なり、Expressのミドルウェアやプラグインを再利用できないことを意味します。同様に、それらはV8を埋め込みますが、libuvは埋め込みません。つまり、node.jsと同じノンブロッキングAPIを提供しないため、ユーザーは特定のnpmモジュールがそこで機能するかどうかを確信できません。これは、重要なアプリケーションがバックエンドの代わりにArangoDBを使用できないことを意味し、Foxxの潜在的な有用性の多くを否定します。
  7. OrientDBは、ファーストクラスのプロパティレベルとデータベースレベルのインデックスをサポートしています。効率を最大化するために、クエリを実行して特定のインデックスに直接挿入できます。 ArangoDBでこれがサポートされているのを見たことがありません。
  8. OrientDBはより確立されたオプションであり、多くの著名なユーザーがいます。 ArangoDBは新しく、あまり知られていませんが、急速に成長しています。
  9. ArangoDBのドキュメントは優れており、さまざまなプログラミング言語の公式ドライバーを提供しています。 OrientDBのドキュメントはそれほど良くはなく、ほとんどのプラットフォーム用のドライバーがありますが、それらはコミュニティを利用しているため、最先端のOrientDB機能を常に最新の状態に保つとは限りません。
  10. Java(またはa Javaブリッジ))を使用している場合は、OrientDBをライブラリとしてアプリケーション内に直接埋め込むことができます。このユースケースは不可能です。 ArangoDBで。
  11. OrientDBには、ユーザーとロール、および レコードレベルのセキュリティ の概念があります。これはあなたにとってキラーな機能かもしれません、それは私にとってです。また、トークンベースの認証もサポートしているため、OrientDBをユーザーの承認/認証の主要な手段として使用することができます。 OrientDBにはLDAP統合もあります。対照的に、ArangoDBは非常に単純な認証オプションのみをサポートします。

どちらのシステムにも独自の利点があるため、どちらを選択するかは、それぞれの状況に依存します。

  • 小さなアプリケーションを構築していて、開発者の生産性を最適化するWeb開発者である場合は、ArangoDBを使用してすばやく起動して実行する方がおそらく簡単です。

  • 数ギガバイトまたはテラバイトのデータを格納する可能性のある、または数千の同時ユーザーがいる、「エンタープライズ」ユースケースがある、またはきめ細かいセキュリティ制御が必要な、より大きなアプリケーションを構築している場合は、OrientDBが最適です。

  • RDFまたは同様に構造化されたリンクトデータを保存する場合は、OrientDBを選択します。

  • Javaを使用している場合は、OrientDBを選択するだけです。

注:これは(私の意見)今日のプレーの状態であり、物事は急速に変化し、冷酷な効率を過小評価することはありませんArangoDBの背後にある素晴らしいチームの中で、私はそれが完全には存在しないと思いますまだ:)


チャールズピック(codemix.com)

36
codemix