2012-03-07 8 views
11

私はレストランのための推薦エンジンを構築するプロジェクトを開始する用意ができています。私はneo4j(グラフdb)とmongodb(文書db)の間でうっとりしています。私のノード/文書は、レストランや人物のようなものになります。私はいくつかのエッジ、人 - >好きな - >レストラン、または人 - > ate_at->レストランのようなものが欲しいことを知っています。しかし、私の主なクエリは、場所YのXマイル内にレストランを見つけることになります。空間検索のためのneo4jとmongodb

私は20のレストランがYのXマイル以内にありますが、エッジで接続されていない場合、neo4jはどのように空間クエリ?私はmongodbと知っています。私は緯度/経度のインデックスを作成し、すべてのレストランタイプをクエリできます。 neo4jは切断されたグラフで同じ機能を提供しますか?

「どのレストランが私の友人が最も頻繁に食べるのですか?」という質問に答えるのはneo4j(グラフDB)ですか?またはmongodb(document db)は私に同様の機能を提供しますか?

答えて

7

私はNeo4J Spatialに慣れていませんが、MongoDBはFoursquareが使っている目的が正確に表現されているので、少なくともMongoDBは適しているようです。 MongoDBのジオインデックスは非常に高速で、うまくスケールアップされます。

+0

合意しました。 MongoDBは、あなたの要件に完全にマッチします。今すぐNode.JSと混ぜて、超高速でスケーラブルなソリューションをお持ちです – psousa

+0

ありがとうございます。私は今このソリューションのためにmongodbを実装する予定です。これは空間インデックスと多数のAPIのために私が最初にやりたいことでした。 – drizkol

10

Neo4j Spatialは、グラフ自体の一部であるSpatial RTree(または他の手段)インデックスを導入しています。つまり、空間検索を介して接続されていないドメインエンティティであっても、それらをインデックスすると(つまり、リレーションシップによってSpatialインデックスがレストランに接続されます)。また、これは柔軟性があり、RTreeのRaw BBox検索と、同じカテゴリのレストランカテゴリをチェックするなど、グラフのさまざまな部分に移動することができます。

この方法では、のNeo4j空間はあなたがなどの穴を持つ多角形の組み合わせを検索し、検索のような完全なトポロジを形成し、期待する検索機能の全範囲をサポートしている

のNeo4j空間が0.7であることに注意してください、 http://groups.google.com/group/neo4j/about :)

1

もう1つの解決策は、CouchBaseを使用することです。ドキュメントモデルも使用していますが、クエリ用にMapReduceをもっと快適にする必要があります。 MongoDBに感謝していますが、それは時間とともに変化する可能性があります。

私はあなたのニーズに合った、おそらくあなたの空間クエリにふさわしい、Mongoが与えた2つの選択肢には同意します。

0

Neo4j geospatialは、その拡張を拡大しません。私はneo4jで地理空間レイヤーを作成し、このレイヤーにノードを追加しました。 10,000ノードを超えると、neo4j2.0を使用してもレイヤーへのノードの追加が非常に遅くなります

一方、mongodbジオロケーションは比較的高速でスケーラビリティが向上します。

関連する問題