日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > asp.net >内容正文

asp.net

MongoDB的设计模式策略

發布時間:2025/7/25 asp.net 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 MongoDB的设计模式策略 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

原文:MongoDB Design Patterns
作者: Darel Lasrado
譯者:仲培藝,關注數據庫領域,糾錯、尋求報道或者投稿請致郵:zhongpy@csdn.net。

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

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

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

1. 查詢命令分離模式

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

2. 應用程序級事務模式

MongoDB不支持事務和文件內部鎖定。然而,依據應用邏輯,應當保留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,/ } )

    總結

    以上是生活随笔為你收集整理的MongoDB的设计模式策略的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。