mongodb设计模式策略之读书笔记

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mongodb设计模式策略之读书笔记相关的知识,希望对你有一定的参考价值。

 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设计模式策略之读书笔记的主要内容,如果未能解决你的问题,请参考以下文章

读书笔记博客实战之搜索引擎索引和流量涨跌策略分析[图]

《LINUX内核设计与实现》读书笔记之第一章和第二章

JavaScript设计模式与开发实践---读书笔记 策略模式

Effective Java 读书笔记之七 通用程序设计

读书笔记 --简约至上—交互式设计四策略

大话设计模式读书笔记--2.策略模式