鍍金池/ 教程/ 數(shù)據(jù)庫(kù)/ 數(shù)據(jù)模型
更新文檔
GridFS
Rockmongo 管理工具
Map Reduce
Java
創(chuàng)建備份
數(shù)據(jù)模型
創(chuàng)建數(shù)據(jù)庫(kù)
映射
查詢文檔
索引限制
ObjectId
刪除文檔
數(shù)據(jù)類型
高級(jí)索引
索引
優(yōu)勢(shì)
記錄排序
查詢分析
插入文檔
刪除集合
全文檢索
創(chuàng)建集合
概述
數(shù)據(jù)庫(kù)引用
覆蓋索引查詢
安裝環(huán)境
PHP
刪除數(shù)據(jù)庫(kù)
固定集合
關(guān)系
聚合
自動(dòng)增長(zhǎng)
復(fù)制
限制記錄
部署
分片
正則表達(dá)式
原子操作

數(shù)據(jù)模型

MongoDB 中的數(shù)據(jù)模式非常靈活。同一集合中的文檔不需要具有同一字段或結(jié)構(gòu),集合文檔的公用字段可能包含不同類型的數(shù)據(jù)。

設(shè)計(jì) MongDB 模式時(shí)應(yīng)注意的問(wèn)題

  • 根據(jù)用戶需求來(lái)設(shè)計(jì)模式。
  • 如果想一起使用對(duì)象,請(qǐng)將這些對(duì)象合并到一個(gè)文檔中,否則要將它們分開(但是要確保不需要連接)。
  • 經(jīng)常復(fù)制數(shù)據(jù)(但要有一定限度),因?yàn)榕c計(jì)算時(shí)間相比,硬盤空間顯得非常便宜。
  • 在寫入時(shí)進(jìn)行連接,而不能在讀取時(shí)連接。
  • 針對(duì)經(jīng)常發(fā)生的用例來(lái)設(shè)計(jì)模式。
  • 在模式中實(shí)現(xiàn)復(fù)雜的聚合。

范例

假使一個(gè)客戶需要為他的博客站點(diǎn)設(shè)計(jì)一個(gè)數(shù)據(jù)庫(kù),讓我們來(lái)看看 RDBMS 與 MongoDB 在模式設(shè)計(jì)上的差異。網(wǎng)站需求如下所示:

  • 每篇博客都具有唯一的標(biāo)題、描述以及 URL。
  • 每篇博客都具有一個(gè)或多個(gè)標(biāo)簽。
  • 每篇博客都具有發(fā)表者的名稱,以及喜歡
  • 每篇博客都有用戶的評(píng)論,用戶名、消息、日期時(shí)間以及評(píng)論的喜歡度。
  • 每篇博客都可以有 0 個(gè)或多個(gè)評(píng)論。

在 RDBMS 中,設(shè)計(jì)一個(gè)能夠滿足上述需求的數(shù)據(jù)庫(kù)模式至少需要 3 個(gè)表。如下圖所示。

http://wiki.jikexueyuan.com/project/mongodb/images/rdbms.png" alt="rdbms1" />

在 MongoDB 中,設(shè)計(jì)出來(lái)的模式卻只有一個(gè)集合 post,其結(jié)構(gòu)如下:

{
   _id: POST_ID
   title: TITLE_OF_POST, 
   description: POST_DESCRIPTION,
   by: POST_BY,
   url: URL_OF_POST,
   tags: [TAG1, TAG2, TAG3],
   likes: TOTAL_LIKES, 
   comments: [  
      {
         user:'COMMENT_BY',
         message: TEXT,
         dateCreated: DATE_TIME,
         like: LIKES 
      },
      {
         user:'COMMENT_BY',
         message: TEXT,
         dateCreated: DATE_TIME,
         like: LIKES
      }
   ]
}   

雖然只是展示數(shù)據(jù),在 RDBMS 中需要連接三張表,而在 MongoDB 中則只需要一個(gè)集合。

上一篇:部署下一篇:刪除文檔