web-dev-qa-db-ja.com

階層データを保存するのに最適なNoSQLデータベースのタイプは何ですか?

階層データを保存するのに最適なNoSQLデータベースのタイプは何ですか?

たとえば、フォーラムの投稿をツリー構造で保存したいとします。

original post
 + re: original post
 + re: original post
   + re2: original post
     + re3: original post
   + re2: original post
67
deamon

これはグラフデータベースです。ツリーデータベースとして使用できます。

http://neo4j.com/

17
Ripal Barot

MongoDBとCouchDBはソリューションを提供しますが、機能は組み込まれていません。これを参照してくださいSO上の質問 リレーショナルデータベースの階層を表す 私が見た他のほとんどのNoSQLソリューションはこの点で類似しています;独自のアルゴリズムを記述する必要がありますノードが追加、削除、移動されるときにその情報を再計算するために。一般的に言えば、高速読み取り時間(例: 入れ子集合 )または高速書き込み時間( 隣接リスト =)。前述のSOこれらの行に沿ったオプションについての質問を参照してください- フラットテーブルアプローチ は、あなたの質問に最も近いように見えます。

これらの考慮事項を抽象化する1つの標準は、 Javaコンテンツリポジトリ (JCR)です。 Apache JackRabbitJBoss eXo は両方とも実装です。上記のように、両方の階層がまだ階層を維持するために何らかのアルゴリズム計算を実行していることに注意してください。さらに、JCRは権限、ファイルストレージ、およびその他のいくつかの側面も処理します。したがって、プロジェクトにとってはやり過ぎかもしれません。

31
orangepips

おそらく必要なのは、 MongoDB または CouchDB のようなドキュメント指向のデータベースです。

MongoDBに階層データを保存できるさまざまな手法の例を参照してください。 http://www.mongodb.org/display/DOCS/Trees+in+MongoDB

18

同じ問題に直面して、Lua + Redisを使用して独自の(非常に単純な)ソリューションを作成することにしました https://github.com/qbolec/Redis-Tree/

3
qbolec
3
Gandalf

グラフデータベースもおそらくこの問題を解決するでしょう。 neo4jがスケーリングに関して十分でない場合、 Titan を検討してください。これは、HBaseを含むさまざまなストレージバックエンドに基づいており、非常にうまくスケーリングするはずです。 neo4jほど成熟していませんが、非常に有望なプロジェクトです。

2
user1234883

Exist-db xml永続性の階層データモデルを実装

2
lisak

LDAP、明らかに。 OpenLDAPはそれを簡単に処理します。

2
hyc

数学、より具体的には、グラフ理論では、ツリーは、任意の2つの頂点が1つのパスで接続されている無向グラフです 。したがって、 graph db を指定すると、確実にジョブが実行されます。ところで、ツリーのような通常のグラフは、任意のリレーショナルまたは非リレーショナルDBに簡単にマッピングできます。階層データをリレーショナルデータベースに保存するには、 Bill Karwin によるこの素晴らしいプレゼンテーションをご覧ください。木を保管する施設を備えたORMもあります。たとえば、 TypeORM は、階層構造を格納するための隣接リストとクロージャテーブルパターンをサポートします。

TypeORMは、TypeScript\Javascript開発で使用されます。 一般的なORMを確認 環境に基づいてツリーをサポートするものを見つけます。

非リレーショナルDBの王[IMHO]はMongodbです。 documentation であることを確認してください。木をどのように保存するかを見つけます。ツリーは最も一般的な種類のグラフであり、どこでも使用されています。確立されたDBソリューションには、ツリーを処理する方法が必要です。

1
pouya

週末は、MUMUPS dbをフルスタックのJavaScriptブラウザアプリケーション開発フレームワークのバックエンドとして使用するトレーニングコースで過ごしました。素晴らしいもの! GPLの下でのMUMPSのGT.Mディストリビューションをお勧めします。または、Vanilla MUMPSの場合は http://sourceforge.net/projects/mumps/?source=recommended を試してください。 http://robtweed.wordpress.com/ ewd.js jsフレームワークとMUMPSの詳細を確認してください。

0
chris topinka

MarkLogic を確認してください。 Webサイトからデモコピーをダウンロードできます。非構造化データ用のデータベースであり、データベースのNoSQL分類に分類されます。非構造化データはかなり負荷の高い用語ですが、RDBMSの行と列にうまく適合しないデータ(階層データなど)と考えてください。

0
Scott

答えはありません。 SQLServer 2008 !!!!再帰クエリに最適です。または、昔ながらのルートに移動し、階層データを別のテーブルに保存して、再帰を回避できます。

リレーショナルデータベースはツリーデータに非常に適していると思います。クエリのパフォーマンスと使いやすさの両方。 1つの注意事項があります。..誰かが投稿するたびに、インデックス付きテーブル、およびおそらく他のいくつかのインデックス付きテーブルに挿入します。挿入のパフォーマンスは、Facebookキャリバーフォーラムで問題になる可能性があります。

0
Lord Tydus