2012-05-08 30 views
8

我習慣於使用mysql,但對於我的下一系列項目CouchDB(NoSQL)似乎是要走的路,基本上避免了mysql中的EAV,並且擁抱它提供的所有酷炫功能。couchdb多個數據庫

經過大量的調查和閱讀文檔等,有一件事我似乎不太瞭解。

假設我在我的服務器上託管了三個Web應用程序,因此需要三個相應的數據庫。例如,一個是一個帶有產品和發票表的網上商店,一個是帶有文章和評論表的網絡日誌,另一個是具有遊戲統計表(顯然簡化)的基於網絡的遊戲。

因此,我在一次安裝的mysql上託管多個站點,並且我在我的服務器上運行的每個應用程序都會使用表,字段和內容獲取自己的數據庫。

現在,與CouchDb我想做的完全一樣的事情。問題似乎是在CouchDb中創建數據庫,與在mysql中創建表格更類似。即我爲我的博客創建了名爲'comments','articles'等的數據庫,並且在每篇文章或每個評論的文檔中創建一個文檔。

所以我的問題是:如何在一個CouchDB安裝中將數據從多個Web應用程序中分離出來?

我想我在這裏做了一些根本性的錯誤,但希望你們中的一個能幫助我走上正確的軌道。

回答

6

在CouchDB中,沒有明確的需要將不相關的數據分離到多個數據庫中。如果您已正確構建文檔和視圖,則只有相關數據會出現在您的查詢中。

如果您決定將您的數據分隔到不同的數據庫中,只需創建一個新的數據庫即可。

$ curl -X PUT http://localhost:5984/somedb 
{"ok":true} 
+0

所以如果我有兩個應用程序與數據明智的沒有關係的對方,我最終會與兩個單獨的數據庫吧?例如http:// localhost:5984/webshop_for_client和http:// localhost:5984/personal_blog –

+0

正確。這些是2個獨立的數據庫。 – Chris

4

從我使用CouchDB的經驗,無關的數據分成不同的數據庫是性能非常重要,也是一個沒有腦子。視圖生成是couchdb的一個痛苦的部分。每次數據庫更新時,都必須重新生成視圖(將它們視爲傳統關係sql db中的索引)。這涉及在數據庫中每文件重複。因此,如果您有200萬個A類文檔,並且您有300個類型的文檔,並且B需要重新生成一個視圖,那麼在視圖生成過程中將執行所有200萬和300個枚舉,將花費很長時間(甚至可能會執行讀取超時)。

因此,擁有多個數據庫在保持視圖(如何在couchdb中查詢,這是一個顯而易見的重要且不可避免的功能)更新時是不容小覷的。

+1

「每次數據庫更新」都有點誤導。添加/更新/刪除文檔時不會重新生成視圖 - 僅當視圖的定義發生更改時纔會重新生成視圖,這種情況很少見。定期的CRUD操作會逐步更新視圖。 –

2

@殭屍是非常正確的表現。 CouchDB不適合在單個數據庫中處理大量文檔。如果您需要執行,比如說,超過5000個文檔,MongoDB將勝過CouchDB。

CouchDB中的視圖是必不可少的,但痛苦的是,有限的JavaScript選項來構建您的查詢(甚至不考慮文檔引用或嵌套對象)。考慮到對不同文檔使用多個數據庫是相當有效的解決方案。有些人會這樣說:

CouchDB是一個NoSQL數據庫,因此您不應該需要訂購文檔或使用視圖以外的其他內容進行過濾。的NoSQL數據庫的核心功能是存儲方案無文檔的能力[...]

而且我覺得很煩人,當你需要找到一個解決辦法,以績效查詢。如果允許您分割數據,則不應介意創建一些數據庫來分隔數據,它仍將位於'單個CouchDB安裝'上。不要忘記,CouchDB適用於小型數據庫。數據庫最小,查詢速度最快,性能就會越好。

(我不知道是否有任何英文錯誤,如果是的話請原諒我)


編輯ArangoDB有些公司提出,MongoDB的和CouchDB的自己之間的比較,並正在確認我說的文件數量。這是結果:

Graphical comparison

有在其網站上大量的其他資源。另一方面,這個聲明是一個人際體驗,並且通過我在互聯網上找到的一個.PHP基準測試軟件來對我的實習進行基準測試。結果在下面提供:

enter image description here

+0

「如果你需要執行,比方說,超過5000個文檔,MongoDB將超越CouchDB。」 - >這是純粹的,未經剔除的廢話 –

+1

- > https://www.arangodb.com/wp-content/uploads /2014/12/chart-overall-2.png 我們也對它進行了基準測試,即使它不在互聯網上(這是實習)。請證明你的觀點,也許我們可以討論它,而不是幾乎沒有任何侵略。 不幸的是,Mongo和CouchDB之間沒有很多圖形比較,這讓我感到困惑。 –