2012-06-19 57 views
0

我打算編寫一個博客樣式的應用程序,想知道我應該使用什麼存儲。針對博客數據的NoSql解決方案

我打算去NoSql解決方案,因爲做數據庫架構很無聊。我相信我可以使用json結構化數據完成大部分功能。

設計時需要考慮什麼?哪種NoSql技術更適合這一用途?

大致看mongo/couchdb會做,我希望得到一些基於經驗的建議。

感謝您的幫助!

回答

1

的MongoDB/CouchDB的

我想這兩者的一個容易下手是MongoDB的。它更像一個古老的關係數據庫,因爲您可以將索引添加到列或調用諸如count之類的操作。就我所知,在CouchDB中,您寧願將Map-Reduce用於所有這些功能。在CouchDB中通過所謂的views生成索引。

此外,MongoDB將數據庫,表概念大致映射到NoSQL(兩級訪問數據),而CouchDB只知道一個級別(數據庫)。

​​

所以我想CouchDB的可能會有點困難,在一開始就明白了,因爲你必須選擇通過某種類型的文件(或使用多個DBS,但我認爲一個額外的屬性type是什麼人使用,看到這presentation by David Zuelke page 41

MongoDB通常與您可以包含在您的編程語言(如果存在一個庫,但它們存在於大多數語言)的API一起工作,然後這些調用以二進制格式發送到服務器。另一方面,CouchDB使用REST-API。

結構數據

你可以環顧網絡上的一些教程。他們經常會解釋一些關於博客的內容,因爲博客是面向文檔的數據庫的一個很好的例子。

讓我們在這裏小看一下:您的帖子將包含一個表(或者如果您使用CouchDB,則爲type)。每篇文章都可以有文字,一些標籤,日期和評論。關於文檔dbs的一點是,你可以把所有的東西都放在文檔的旁邊,並且保存關係數據庫中所有的這些關係。

這意味着,我們可能我們的posts模型是這樣的:

{type: post, 
date: 2012-06-19 22:14:23, 
author: user1462192, 
text: Welcome to my blog, 
comments: [ 
    {author: Aufziehvogel, 
    date: 2012-06-19 22:14:45, 
    text: Hello! 
    }, 
    {author: user1462192, 
    date: 2012-06-19 22:14:45, 
    text: Hello, too! 
    } 
], 
tags: [welcome, new, interesting] 
} 

所以這是一個後可能是什麼樣子。

開發軟件時你總是需要做什麼。想想看,你會保存哪些數據。想想它是如何相關的。然後對於面向文檔的數據庫,您還必須考慮如何訪問它。

有時候您可能會有數據不應該保存爲帖子本身的子元素,因爲它太大了。也許你不只有一個作者的名字,也比較喜歡年齡,註冊日期,信息...

然後,用戶可能是這樣的:

{name: Aufziehvogel, 
age: 21, 
registration: 2012-06-19, 
interests: [php, nosql, data-mining, foreign-languages] 
} 

你不會想附上這個數據每個博客文章,因爲它可能會改變,因爲它是非常大的。相反,你會(就像關係數據庫)在你的後數據中存儲一個引用給用戶。然後,您將不得不合並作者和博客帖子,如上面鏈接的演示文稿中所述(p 40-42)。這將合併所需的作者和博客文章。

你也可以做的是在那裏保存作者名和ID,以便能夠顯示名稱並生成HTML鏈接,而不必從數據庫中獲取「真實」作者。

驗證

什麼Zuelke還顯示的是,作爲面向文檔DBS它的應用程序的任務,以檢查是否具有充分形成的數據。在MySQL中,許多任務可以通過數據庫(列,數據類型,長度,UNIQUE鍵)來執行,但是當使用面向文檔的dbs時,您必須在應用程序中自行完成它(除了我認爲MongoDB具有唯一鍵)。

這使得一個好的代碼結構也很重要,這樣你就不必擔心在太多地方數據的格式。

我想可以說更多,但我希望這是第一個開始。

相關問題