標籤:.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設計模式策略之讀書筆記