2017-05-31 53 views
-1

我正在研究一個大型且不經常變化的人員數據集的小型項目。每個記錄都存儲有一個人的姓名和他們工作過的以前的公司名單(按編號ID)。搜索數百萬條記錄並形成連接時使用哪個數據庫?

我正在寫一個單頁面的web應用程序,它可以讓你搜索和直觀地查看人員和公司的連接。如果我輸入「John Smith」,它會向我展示他爲公司工作的公司,在該公司工作的人員以及他們工作的公司以及其他公司(如網絡圖)。

我目前正在使用MongoDB來存儲所有這些人...但我有一種感覺,這不是一個最佳的解決方案。我發現有許多不同的數據存儲庫,如Cassandra(寬列),Couchbase(類似於Mongo?),ElasticSearch(搜索),Neo4J(圖),可能更優化並且性能更好。

有大量的選項可供選擇,但我不確定如何選擇最佳的解決方案來使用。

是否可以使用多個數據庫(例如MongoDB和Neo4J),還是在實踐中很糟糕,因爲很難保持它們同步在一起?

我該如何去選擇最優化的技術集合以確保我的應用程序性能良好,並且可以輕鬆查詢我的數據集?

回答

0

1)有趣的是,你聲明結構是「像網絡圖」。所以這種數據庫將是一個明顯的適合。

2)保持幾個數據庫同步是一個痛苦,毫無疑問,但你確實聲稱你的數據集非常靜態。所以你可以處理痛苦,並選擇最適合你的問題的每一部分。另一方面,像Neo4j和MongoDB這樣的解決方案確實包含全文搜索功能(或易於實現)。除非您需要超級搜索功能,否則我不認爲Elasticsearch是您的問題的候選人。

3)我會選擇兩個可能的候選人(我個人會選擇使用Neo4j(圖形)並堅持使用MongoDB(因爲您已經獲得了該格式的數據))並執行POC。你能回答你的問題嗎?它足夠靈活來回答不同的問題嗎?

當然只是我2.5歐元的意見。

問候, 湯姆

1

雖然這個問題可能會被關閉,是基於觀點的,還有,你需要考慮的幾個問題。

A)將網絡更新到規範化存儲區(例如,mongo)有時會出現問題,一旦更新網絡的一個點,最終不得不更新相鄰節點和多個MongoDb文檔。

請注意,它和Elasticsearch一樣。 B)你提到「搜索」。在提到的技術中,那裏只有一個真正的候選人,它是Elasticsearch。雖然Neo4j有很酷的集成,比如廣泛使用的neo4j-to-elasticsearch插件或APOC,但當您開始對搜索有一些需求時,ES是這個星球上最好的技術之一。

所以海事組織,採取兩個最好的。很多大公司都在這樣做,例如Airbnb(https://www.youtube.com/watch?v=gayXC2FDSiA

最終你會得到什麼能夠從強大的搜索結合基於圖的相關性提升中受益。

一個更復雜的例子就是我們所說的Graph-Aided Search

相關問題