mongodb設計模式策略之讀書筆記

來源:互聯網
上載者:User

標籤:.so   mongo   proc   pat   高效   message   職責   應用程式   建立   

 mongodb的設計模式策略
讀書筆記

1.查詢命令分類模式
在複本集中職責被分離到不同的節點。最基本的第一類節點可能也同時佔據著首要地位,它只需要儲存那些寫入和更新所需的資料。而查詢工作則交由第二類節點來執行。這一模式將提升首要節點伺服器的寫輸送量,因為當寫入一組對象時,需要更新及插入的資料量也隨之減少,除此之外,二類節點也得益於較少的待更新資料和其自身所具有的為其工作量而最佳化的記憶體工作集。
也就是讀寫分離,主節點寫,備節點做查詢。

2.應用程式式事務模式
使用queue
範例
db.queue.insert( { _id : 123,  
 
    message : { },  
    locked : false,  
    tlocked : ISODate(),  
    try : 0 });  
var timerange = date.Now() - TIMECONSTANT?  
var doc = db.queue.findAndModify( { $or : [ { locked : false }, { locked : true, tlocked : {
$lt : timerange } } ], { $set : { locked : true, tlocked : date.Now(), $inc : { try : 1 } } }  
)? 
//do some processing  
db.queue.update( { _id : 123, try : doc.try }, { } )? 

這裡沒有理解

3.Bucketing模式
當文本含有一個不斷增長的數組時,則使用Bucketing模式,例如指令。而指令線可能會擴充到超過文檔大小的合理值。該模式經由編程方式處理,並通過公差計算觸發。

var TOLERANCE = 100?  
    for( recipient in msg.to) {  
        db.inbox.update( {  
            owner: msg.to[recipient], count: { $lt : TOLERANCE }, time : { $lt : Date.now() } },  
{ $setOnInsert : { owner: msg.to[recipient], time : Date.now() },  
{ $push: { "messages": msg }, $inc : { count : 1 } },  
{ upsert: true } )?

這裡依然沒有理解

4.關係模式
有時,會有不能插入整個文檔的情況,例如人體建模時,我們就可以使用該模式來建立關係。

確定資料是否屬於該文檔,即二者間是否有關係。

如果可能的話,特別是面對有用的專屬(專屬)資料時,插入文檔。

儘可能不參考id值。

對關係中的有用部分進行反正常化處理。好的候選不會經常甚至從不更改值,並且頗為有用。

關注反規範資料的更新和關係修複。

{  
     _id : 1,  
    name : ‘Sam Smith’,  
    bio : ‘Sam Smith is a nice guy’,  
    best_friend : { id : 2, name : ‘Mary Reynolds’ },  
    hobbies : [ { id : 100, n :’Computers’ }, { id : 101, n : ‘Music’ } ]  
}  
{  
    _id : 2,  
    name : ‘Mary Reynolds’  
    bio : ‘Mary has composed documents in MongoDB’,  
    best_friend : { id : 1, name : ‘Sam Smith’ },  
    hobbies : [ { id : 101, n : ‘Music’ } ]  
}

5.物化路徑模式
在一個資料模型的樹模式中,同一物件類型是該對象的子物件,這種情況下可以使用物化路徑模型來以擷取更高效的檢索、查詢。樣本如下:

{ _id: "Books", path: null }  
{ _id: "Programming", path: ",Books," }  
{ _id: "Databases", path: ",Books,Programming," }  
{ _id: "Languages", path: ",Books,Programming," }  
{ _id: "MongoDB", path: ",Books,Programming,Databases," }  
{ _id: "dbm", path: ",Books,Programming,Databases," }

按欄位路徑查詢樹模式:

db.collection.find().sort( { path: 1 } )

使用路徑欄位的常規表達來找出Programming的後代集:

db.collection.find( { path: /,Programming,/ } )

在Books是top parent的情況下查詢Books的後代集:

db.collection.find( { path: /^,Books,/ } )

這裡使用模糊比對,沒有理解為什麼可以算更高效的檢索查詢。

該文讀來自
www.iteye.com/news/31667

mongodb設計模式策略之讀書筆記

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.