2012-03-07 70 views
11

我正準備啓動一個項目,我將建立餐館推薦引擎。我一直在neo4j(圖形db)和mongodb(文檔db)之間徘徊。我的節點/文檔將是餐廳和人物等。我知道我會想要一些邊緣,比如人物 - >喜歡 - >餐廳,或者人物 - >餐廳 - >餐廳。然而,我的主要查詢將是在位置Y的X英里內找到餐館。的Neo4j VS MongoDB中的空間搜索

如果我在Y的X英里內有20家餐廳,但沒有通過任何邊緣連接,neo4j如何能夠處理空間查詢?我知道與MongoDB我可以索引經緯度和查詢所有餐廳類型。 neo4j在斷開的圖中提供了相同的功能嗎?

當談到回答諸如「我的朋友最常吃哪些餐廳?」這樣的問題時,neo4j(圖形分貝)是否應該走?或者將mongodb(文檔db)提供給我類似的功能?

回答

7

我並不熟悉Neo4J Spatial,但似乎MongoDB至少是一個很好的選擇,因爲它是Foursquare使用的數據庫,完全符合您描述的目的。 MongoDB地理索引非常快,並且很好地擴展。

+0

同意,不看任何進一步。 MongoDB與您的需求完美匹配。現在只要用Node.js的混吧,你有一個超快速和可擴展的解決方案 – psousa 2012-03-07 17:57:03

+0

感謝傢伙 - 我現在打算在此解決方案,而這正是我最初想,因爲空間索引和衆多的API做MongoDB的實施。 – drizkol 2012-03-07 19:45:29

10

Neo4j Spatial引入了作爲圖形本身一部分的空間RTree(或其他方法)索引。這意味着,如果您爲它們編制索引(即關係將空間索引連接到餐館),即使斷開連接的域實體也將通過空間搜索找到。此外,這是非常靈活,你可以在RTREE與其他事物一樣在餐館類別檢查在同一個結合原始BBOX搜索去,因爲你可以跳將出來,並在圖中的不同部分。

這樣,Neo4j的空間是配套齊全的搜索功能,你會期望形成完整的拓撲結構,如聯合搜索和搜索上的多邊形與孔等

要知道,Neo4j的空間是0.7,所以要溫柔,問問http://groups.google.com/group/neo4j/about :)

1

另一個可能的解決方案是使用CouchBase。它也使用文檔模型 - 儘管您需要更加適應查詢的MapReduce。它現在有更好的空間功能,感謝MongoDB,但這可能會隨着時間的推移而改變。

不建議,我同意你給Mongo的兩個選擇會適合你的需要,可能更適合你的空間查詢。

0

Neo4j的地理空間不能按比例增長好。我在neo4j中創建了一個地理空間層,並向這個層添加了節點。在超過10,000個節點的情況下,即使使用neo4j2.0,節點添加到該層的速度也變得非常緩慢。另一方面,mongodb地理位置的工作速度相對更快,並且更具可擴展性。