mongoDB應用程序設計

一. 範式與反範式

範式化:將不同數據放在不同集合,不同集合之間可以直接引用數據。避免數據存在於多個集合當中。

由於mongoDB不支持不同集合直接引用數據,類似關係型數據庫中的join操作,mongoDB不支持。我們在設計的時候,要慎重考慮用範式還是非範式,參考原則見下圖:


也就是,如果數據修改不頻繁,比較小,讀取頻繁適合非範式設計。


二. 優化數據操作

2.1優化文檔增長

mongoDB每一條文檔都是緊湊的,中間沒有間隙,如果一個文檔修改增長了,就需要挪動位置了,這樣非常影響性能。mongo識別到這種操作之後,會給後續的新增文檔預留一定的空間,這個空間就是填充因子。如果文檔的確會被大概率的增長,建議插入一個多餘字段,來搶佔空間,參考如下博客:http://www.cnblogs.com/smileberry/p/4171035.html


2.2 刪除舊數據

有些數據過幾個月沒用了,常見刪除舊數據的方式是:

使用固定集合  使用TTL集合,定期刪除數據


三. 數據庫和集合設計

1. 具有相近模式的文檔放在一個集合裏面,由於mongo不支持集合join,需要經常join的數據,放到一個集合裏

2. 數據庫最大的問題是鎖機制,具體鎖機制可參考如下博客:http://blog.csdn.net/liwenshui322/article/details/77630475

我們通常需要將訪問量相近的數據放到一個庫裏面,比如用戶,用戶參與的活動,用戶日誌這3種屬於不同訪問量的數據,可以放到3個不同的數據庫裏面。


四.不適合mongoDB的場景

       1. mongoDB不支持事務,如果需要支持事務,建議採用別的存儲

       2. 從多個維度對不同數據類型的數據進行連接,這是關係數據庫擅長的事情




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章