私はMongoのGeoSpatial機能を使用しましたが、C#またはjavascriptの実装についてサポートが必要な場合は、ガイダンスを提供できます。非常に使いやすいので、開始することをお勧めします。私は今Neo4jについてすべてを学んでおり、MongoとNeo4jの両方を活用するハイブリッドアプローチに取り組んでいます。MongoオブジェクトIDを使用して、MongoのドキュメントをNeo4jのノードに相互参照することをお勧めします。
ハイブリッド実装では、プロファイルとその他の大きな静的データをMongoに保存しています。Neo4jでは、友達や友達の友達のような関係を保存しています。2人の友人が一緒に見たいと思う映画(または実際には最初は考えていなかった他の関係)を分析したい場合は、そのオブジェクトID参照を保持することで、各ノードに出て行くように指示するコードを追加するだけです。関連するプロフィールの映画のリスト。
2011-02-12を追加:
最近、複数のデータベースを使用することになったいくつかのソリューションのプロトタイプを作成して実装したので、この「ハイブリッド」のアイデアをフォローアップしたかっただけです。マーティンファウラーはこれを「ポリグロットパーシスタンス」と呼んでいます。
リレーショナルデータベース、ドキュメントデータベース、グラフデータベース(私の場合、これは通常SQL Server、MongoDB、Neo4j)を組み合わせて使用していることがよくあります。質問は地理空間と同様にデータモデリングに関連しているので、ここで触れたいと思いました。
私はNeo4jをサイト編成(RESTモデルのハイパーメディアのアイデアと同様)、ソーシャルデータのモデリング、および推奨事項の作成(多くの場合、ソーシャルデータに基づく)に使用しました。結果として、私は通常、プログラミングを開始する前に、アプリケーションのこの部分をモデル化します。
MongoDBはそのような単純な永続化メカニズムを提供するため、アプリケーションの残りの部分のプロトタイピングにMongoDBを使用することになります。私はユーザーインターフェイスを使用してアプリケーションの開発を開始するのが好きなので、これはうまく機能することになります。
エンティティをMongoからSQLServerに移動し始めるとき、コンテキストは通常重要です。たとえば、ユーザーが定期的に収集されたデータに基づいて日次レポートを作成できるアプリケーションがある場合、それらのレポートを作成するプロシージャを実行するのが理にかなっている場合があります。毎晩、Mongoに日次レポートオブジェクトを格納します。これらのオブジェクトは、必要に応じてより大きな集計レポートに組み合わせることができます(明らかに、これはいくつかの特殊なケースを考慮していませんが、ポイントには関係ありません)...一方、ユーザーの場合非常に特定の期間に限定されたオンデマンドレポートをプルする必要がある場合は、すべてをSQLサーバーに保持し、必要に応じてそれらのレポートを作成することが理にかなっている場合があります。
そうは言っても、これはもっと熱心に考える価値があります。ここに役立つかもしれないいくつかの考慮事項があります:
- 私は通常、データベースからエンティティをプルする(つまり(リレーショナルデータベースのコンテキストで)-エンティティまたはリストを生成するために必要なデータを提供するデータベースからデータをクエリする)ことがわかった場合、エンティティをリレーショナルデータベースに格納しようとします要求されたパラメータを満たすエンティティの]は、重要な処理を必要としません(たとえば、複数の結合)
- ACIDコンプライアンスが必要ですか(グラフの問題がある場合は、Neo4jを活用できます)?ACIDに準拠したドキュメントデータベースがありますが、Mongoが準拠していない理由があります。MongoDBがACIDに準拠していないとは、実際にはどういう意味ですか?
私が野生で見たMongoの使用法の1つは、言及する価値があると思いました。Hadoopは、Mongoに格納される大規模なハッシュテーブルの計算に使用されていました。トリップアドバイザーでも、オファーや広告などのターゲティングに関して、ユーザーベースのカスタマイズに同様のアプローチが使用されていると思います。