首页 存档 技术 查看内容

MongoDB 的设计模式策略

2018-3-30 13:00 |来自: 互联网 272 0

摘要: 英文:thetechnick 译者:CSDN - 仲培艺 链接:http://www.iteye.com/news/31667 MongoDB是一项通用工具,但它也并非完美。针对某些MongoDB不适用的场合,有时可选用设计模式来加以应对。 MongoDB是一个NoSQL文 ...

英文:thetechnick

译者:CSDN - 仲培艺

链接:http://www.iteye.com/news/31667


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});

vartimerange=date.Now()-TIMECONSTANT

vardoc=db.queue.findAndModify({$or:[{locked:false},{locked:true,tlocked:{

$lt:timerange}}],{$set:{locked:true,tlocked:date.Now(),$inc:{try:1}}}

)

//dosomeprocessing

db.queue.update({_id:123,try:doc.try},{})


3. Bucketing模式


当文本含有一个不断增长的数组时,则使用Bucketing模式,例如指令。而指令线可能会扩展到超过文档大小的合理值。该模式经由编程方式处理,并通过公差计算触发。


varTOLERANCE=100

for(recipientinmsg.to){

db.inbox.update({

owner:msg.to[recipient],count:{$lt:TOLERANCE},time:{ 声明:文章版权归原作者所有 部分文章转自互联网 如有侵权请联系 [邮箱地址] 删除


路过

雷人

握手

鲜花

鸡蛋

相关分类

返回顶部