2017-02-17 70 views
0

我正在閱讀有關NoSQL的內容。我知道這不是建立在關係上,但我無法弄清楚如何做一些基本的事情。 (而且我沒有找到關於它的真實示例代碼)。NoSQL計劃示例

我想存儲用戶,帖子和評論。

SQL版本:

user's table: user_id, username 
posts's table: post_id, user_id, content 
comments's table: comment_id, content 

好吧,簡單。

在NoSQL的是我起草的(100%的功能,我不使用現在這個樣子的MongoDB等任何技術):

users: 
{ 
    id: XX, 
    username: "John" 
}, 
{ 
     id: OO, 
     username: "Mike" 
} 

posts: 
{ 
    id: YY, 
    content: "How are you all ?", 
    user: { 
     id: OO, 
     username: "Mike" 
    }, 
    comments: { 
     id: ZZ, 
     content: "Fine", 
     user: { 
      id: XX, 
      username: "John" 
     } 
    } 
} 

我可以存儲在用戶的ID在文章和評論的地方的整個用戶,但我使用NoSQL,而不是SQL,所以我沒有這樣做。

首先? NoSQL的這種數據模型是否合適?

其次,如果對於上一個問題,如果用戶XX(John)將用戶名更改爲「Tony」會怎麼樣?有可能我將不得不更新他的所有帖子,每個評論也是一樣的!讓我們想象一下,在用戶的生活中,他發佈了10 000多條評論,跆拳道。所以我猜我做錯了。

你能澄清我的誤解嗎?

+0

你知道NoSQL只是意味着「不是SQL」,對嗎?沒有標準化的NoSQL語法,所以一切都取決於您使用的數據庫。你發佈的只是一些看起來像JavaScript對象的東西。 –

+0

NoSQL數據存儲(Cassandra等)通常只是關鍵的價值存儲。所以在你的情況下,也許關鍵是用戶ID,然後是的,你需要找到一種方法來處理它指向的JSON blob。 –

回答

0

這個問題的問題是,它假設所有的NoSQL數據庫以相同的方式工作,基於它看起來像你的問題可能與如何在數據庫中存儲「文檔」(JSON)有關的問題您可以稍後檢索內容,我將從文檔存儲的角度回答這個問題:

由於您已經發現NoSQL沒有提供關係,因此您需要手動處理。在NoSQL世界中,取消規範化通常是確保您可以以較少往返數據庫的方式檢索文檔的第一步,因此您向用戶添加用戶名的方法是典型的方法。

你說的問題是完全有效的,如果用戶名更改會發生什麼?它是有效的,但並不完全真實,博客中的用戶名通常是所有內容的關鍵,所以改變它就是一個很大的改變,而且通常是不允許的。

要執行關係,您可以稍後使用id檢索文檔,並根據需要存儲標識符,以便以與在SQL環境中執行相同的方式標準化數據庫,在這種情況下,您可能需要使用索引如果id是用戶而不是文檔內部ID,或者使用用戶名作爲文檔本身的id,請確保良好的性能。在djondb將是這樣的:

{ 
    "_id": "myuser", 
    "name": "Cross" 
} 

和博客將有

{ 
    "userid": "myuser", 
    "content": "Hello world" 
} 

現在,如果你有什麼需要更新幾個文件?在這種情況下,你將需要djondb,文檔數據庫,支持在幾個文件的交易,讓您的數據庫保持一致

更多數據建模:http://djondb.com/nosql-masterdetail-sample/

更多關於djondb交易:http://djondb.com/section/transactions/

免責聲明:我與djondb合作,所以我總是有偏見!

希望這會有所幫助,