成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

MongoDB的設(shè)計(jì)模式策略

數(shù)據(jù)庫 其他數(shù)據(jù)庫 MongoDB
MongoDB是一個(gè)NoSQL文檔數(shù)據(jù)庫,在大多數(shù)情況下是一個(gè)相對理想的選擇,即使是在其不適用的情況下,也仍然可以依靠下面所列舉的這些設(shè)計(jì)模式來克服其局限性。本文將針對我的另一篇文章《MongoDB的好壞惡》( MongoDB : The Good, The Bad, and the Ugly)中所提及的一些局限性,提供一個(gè)相對應(yīng)的解決方案。

MongoDB是一項(xiàng)通用工具,但它也并非***。針對某些MongoDB不適用的場合,有時(shí)可選用設(shè)計(jì)模式來加以應(yīng)對。

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

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

1. 查詢命令分離模式

 

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

2. 應(yīng)用程序級(jí)事務(wù)模式

MongoDB不支持事務(wù)和文件內(nèi)部鎖定。然而,依據(jù)應(yīng)用邏輯,應(yīng)當(dāng)保留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模式

當(dāng)文本含有一個(gè)不斷增長的數(shù)組時(shí),則使用Bucketing模式,例如指令。而指令線可能會(huì)擴(kuò)展到超過文檔大小的合理值。該模式經(jīng)由編程方式處理,并通過公差計(jì)算觸發(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. 關(guān)系模式

有時(shí),會(huì)有不能插入整個(gè)文檔的情況,例如人體建模時(shí),我們就可以使用該模式來建立關(guān)系。

  • 確定數(shù)據(jù)是否屬于該文檔,即二者間是否有關(guān)系。
  • 如果可能的話,特別是面對有用的獨(dú)有(專屬)數(shù)據(jù)時(shí),插入文檔。
  • 盡可能不參考id值。
  • 對關(guān)系中的有用部分進(jìn)行反規(guī)范化處理。好的候選不會(huì)經(jīng)常甚至從不更改值,并且頗為有用。
  • 關(guān)注反規(guī)范數(shù)據(jù)的更新和關(guān)系修復(fù)。
  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. 物化路徑模式

 

在一個(gè)數(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ī)表達(dá)來找出Programming的后代集:

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

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

  1. db.collection.find( { path: /^,Books,/ } )  
責(zé)任編輯:龐桂玉 來源: 程序源
相關(guān)推薦

2013-11-26 16:09:34

Android設(shè)計(jì)模式

2012-08-30 09:07:33

設(shè)計(jì)模式

2021-06-09 08:53:34

設(shè)計(jì)模式策略模式工廠模式

2015-09-08 13:39:10

JavaScript設(shè)計(jì)模式

2024-10-06 12:56:36

Golang策略設(shè)計(jì)模式

2025-06-30 00:32:43

策略模式算法MyBatis

2014-12-29 10:39:16

JS

2024-01-29 12:22:07

設(shè)計(jì)模式策略模式

2023-05-22 13:27:17

2024-10-14 08:39:29

工廠模式策略模式代碼

2021-02-15 22:07:18

項(xiàng)目策略模式

2023-03-09 11:16:57

MongoDB數(shù)據(jù)節(jié)點(diǎn)

2023-03-09 11:32:00

MongoDB數(shù)據(jù)策略

2024-12-09 09:40:00

策略模式Java

2021-08-19 20:57:21

設(shè)計(jì)模式策略

2025-06-30 04:23:00

2011-07-20 14:04:42

.NET策略模式

2021-04-19 21:25:48

設(shè)計(jì)模式到元

2021-02-01 10:01:58

設(shè)計(jì)模式 Java單例模式

2009-09-24 16:55:27

策略模式
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)

主站蜘蛛池模板: 国产成人精品区一区二区不卡 | 尤物视频在线免费观看 | 国产一区二区影院 | 中文字幕免费中文 | 国产一区久久 | 欧美男人天堂 | 狠狠操狠狠操 | 黄色毛片免费 | 久久久久久久一区 | 特一级黄色毛片 | 国产人久久人人人人爽 | 国产农村妇女精品一二区 | 日韩精品视频在线免费观看 | 国产精品免费高清 | 午夜码电影 | 天天插天天干 | 国产一级特黄真人毛片 | 中文av在线播放 | 国产亚洲久 | 国产一级特黄真人毛片 | 91黄在线观看 | 欧美一级电影免费观看 | 天天操天天摸天天爽 | 九九热这里| 人人鲁人人莫人人爱精品 | 午夜精品久久久久久久久久久久 | 久久久夜色精品亚洲 | 99精品欧美一区二区三区综合在线 | 欧美日韩一区二区在线观看 | 亚洲综合三区 | 香蕉婷婷 | 国产精品久久久久久久久久久久冷 | 日本粉嫩一区二区三区视频 | 欧美日韩精品 | 国内精品久久久久久久影视简单 | 玖玖视频 | aaa一区| 亚洲午夜精品视频 | 成人激情视频免费在线观看 | 中文字幕久久精品 | 在线观看国产网站 |