私はNoSQLに不慣れで、MEANスタック(Mongo ExpressJs AngularJs NodeJs)の個人プロジェクトで遊んでいます。データのノードを管理する種類のドキュメントエディターを構築しています。各ドキュメントは実際にはツリーです。
新しいツリーを作成するためのドキュメント用のCRUD APIと、特定のドキュメント内のノード用のCRUD APIがあります。
現在、ドキュメントはノードを含むすべてを保持するコレクションとして表されています。子の親関係はIDによって行われます。したがって、ノードはIDによるマップであり、各ノードには、どのノードが子であるかへの参照があります。ドキュメントからIDでノードを取得する方が簡単なため、この「フラット」アプローチを選択しました。
ノードとドキュメント間のリレーションテーブル、ノードと子ノード間のリレーションテーブルに慣れているので、ノードを更新するたびに「ノード」マップ全体を保存する必要があるのは少しおかしいです。
NoSQLでそのようなデータ型を表すより良い方法はありますか?
MongoDBでツリー構造を表す場合、いくつかのオプションがあります。適用できる5つの「パターン」を次に示します(末尾の詳細へのリンク)。
MongoDBチュートリアルのこのチュートリアルでは、各パターンの長所と短所について説明します。 http://docs.mongodb.org/manual/tutorial/model-tree-structures/
NoSQLの理念の1つは、現在のタスクに最適なタイプのデータベースを使用することです。 MongoDB以外のものを使用するオプションはありますか?
ドキュメント階層については、 Java Content Repository 標準のようなものを試すことができます。ほとんどの主要なCMシステムで実装されており、完全に準拠したリファレンス実装 Apache Jackrabbit もあります。