av激情亚洲男人的天堂国语,日韩欧美精品一中文字幕,无码av一区二区三区无码,国产又色又爽又刺激的a片,国产又色又爽又刺激的a片

MongoDB的設計模式策略

MongoDB是一項通用工具,但它也并非***。針對某些MongoDB不適用的場合,有時可選用設計模式來加以應對。

為泰州等地區(qū)用戶提供了全套網(wǎng)頁設計制作服務,及泰州網(wǎng)站建設行業(yè)解決方案。主營業(yè)務為網(wǎng)站設計制作、成都做網(wǎng)站、泰州網(wǎng)站設計,以傳統(tǒng)方式定制建設網(wǎng)站,并提供域名空間備案等一條龍服務,秉承以專業(yè)、用心的態(tài)度為用戶提供真誠的服務。我們深信只要達到每一位用戶的要求,就會得到認可,從而選擇與我們長期合作。這樣,我們也可以走得更遠!

MongoDB是一個NoSQL文檔數(shù)據(jù)庫,在大多數(shù)情況下是一個相對理想的選擇,即使是在其不適用的情況下,也仍然可以依靠下面所列舉的這些設計模式來克服其局限性。

本文將針對我的另一篇文章《MongoDB的好壞惡》( MongoDB : The Good, The Bad, and the Ugly)中所提及的一些局限性,提供一個相對應的解決方案。

1. 查詢命令分離模式

在副本集中職責被分離到不同的節(jié)點。最基本的***類節(jié)點可能也同時占據(jù)著首要地位,它只需要儲存那些寫入和更新所需的數(shù)據(jù)。而查詢工作則交由第二類節(jié)點來執(zhí)行。這一模式將提升首要節(jié)點服務器的寫吞吐量,因為當寫入一組對象時,需要更新及插入的數(shù)據(jù)量也隨之減少,除此之外,二類節(jié)點也得益于較少的待更新數(shù)據(jù)和其自身所具有的為其工作量而優(yōu)化的內存工作集。

2. 應用程序級事務模式

MongoDB不支持事務和文件內部鎖定。然而,依據(jù)應用邏輯,應當保留queue用法。

 
 
 
 
  1. db.queue.insert( { _id : 123,   
  2.  
  3.   
  4.  
  5.     message : { },   
  6.  
  7.     locked : false,   
  8.  
  9.     tlocked : ISODate(),   
  10.  
  11.     try : 0 });   
  12.  
  13. var timerange = date.Now() - TIMECONSTANT?   
  14.  
  15. var doc = db.queue.findAndModify( { $or : [ { locked : false }, { locked : true, tlocked : { 
  16.  
  17. $lt : timerange } } ], { $set : { locked : true, tlocked : date.Now(), $inc : { try : 1 } } }   
  18.  
  19. )?   
  20.  
  21. //do some processing   
  22.  
  23. db.queue.update( { _id : 123, try : doc.try }, { } )?  

3. Bucketing模式

當文本含有一個不斷增長的數(shù)組時,則使用Bucketing模式,例如指令。而指令線可能會擴展到超過文檔大小的合理值。該模式經(jīng)由編程方式處理,并通過公差計算觸發(fā)。

 
 
 
 
  1. var TOLERANCE = 100?   
  2.  
  3.     for( recipient in msg.to) {   
  4.  
  5.         db.inbox.update( {   
  6.  
  7.             owner: msg.to[recipient], count: { $lt : TOLERANCE }, time : { $lt : Date.now() } },   
  8.  
  9. { $setOnInsert : { owner: msg.to[recipient], time : Date.now() },   
  10.  
  11. { $push: { "messages": msg }, $inc : { count : 1 } },   
  12.  
  13. { upsert: true } )?  

4. 關系模式

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

  • 確定數(shù)據(jù)是否屬于該文檔,即二者間是否有關系。
  • 如果可能的話,特別是面對有用的獨有(專屬)數(shù)據(jù)時,插入文檔。
  • 盡可能不參考id值。
  • 對關系中的有用部分進行反規(guī)范化處理。好的候選不會經(jīng)常甚至從不更改值,并且頗為有用。
  • 關注反規(guī)范數(shù)據(jù)的更新和關系修復。
 
 
 
 
  1. {   
  2.  
  3.      _id : 1,   
  4.  
  5.     name : ‘Sam Smith’,   
  6.  
  7.     bio : ‘Sam Smith is a nice guy’,   
  8.  
  9.     best_friend : { id : 2, name : ‘Mary Reynolds’ },   
  10.  
  11.     hobbies : [ { id : 100, n :’Computers’ }, { id : 101, n : ‘Music’ } ]   
  12.  
  13. }   
  14.  
  15. {   
  16.  
  17.     _id : 2,   
  18.  
  19.     name : ‘Mary Reynolds’   
  20.  
  21.     bio : ‘Mary has composed documents in MongoDB’,   
  22.  
  23.     best_friend : { id : 1, name : ‘Sam Smith’ },   
  24.  
  25.     hobbies : [ { id : 101, n : ‘Music’ } ]   
  26.  
  27. }  

5. 物化路徑模式

在一個數(shù)據(jù)模型的樹模式中,同一對象類型是該對象的子對象,這種情況下可以使用物化路徑模型來以獲取更高效的檢索、查詢。示例如下:

 
 
 
 
  1. { _id: "Books", path: null }   
  2.  
  3. { _id: "Programming", path: ",Books," }   
  4.  
  5. { _id: "Databases", path: ",Books,Programming," }   
  6.  
  7. { _id: "Languages", path: ",Books,Programming," }   
  8.  
  9. { _id: "MongoDB", path: ",Books,Programming,Databases," }   
  10.  
  11. { _id: "dbm", path: ",Books,Programming,Databases," }  

按字段路徑查詢樹模式:

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

使用路徑字段的常規(guī)表達來找出Programming的后代集:

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

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

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

新聞名稱:MongoDB的設計模式策略
網(wǎng)站網(wǎng)址:http://uogjgqi.cn/article/cdcpphp.html
掃二維碼與項目經(jīng)理溝通

我們在微信上24小時期待你的聲音

解答本文疑問/技術咨詢/運營咨詢/技術建議/互聯(lián)網(wǎng)交流