阅读更多

0顶
0踩

数据库

原创新闻 MongoDB的设计模式策略

2016-06-29 14:52 by 主编 ITeye管理员 评论(0) 有8250人浏览
引用

原文: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,/ } )
  • 大小: 34 KB
  • 大小: 11.3 KB
0
0
评论 共 0 条 请登录后发表评论

发表评论

您还没有登录,请您登录后再发表评论

相关推荐

  • PHP经典面试题之设计模式(经常遇到)

    设计模式非常的多,这里介绍单例模式,工厂模式,组合模式,策略模式4种模式 如果有代码有什么问题或者有更好的方式请告知,谢谢!!!!! /** * 单例模式 * @author YangYang * 可以想成在一次http请求中只产生该类...

  • MongoDB 的设计模式策略

    译者:CSDN - 仲培艺www.iteye.com/news/31667MongoDB是一项通用工具,但它也并非完美。针对某些MongoDB不适用的场合,有时可选用设计...

  • MongoDB模式设计

    今天的话题是进阶模式,所以我假设在坐各位至少是已经对MongoDB有了一些基本的了解。 不过每次总有一些同学以为这里有水果吃才坐进来的,所以在这里我简单介绍一下:MongoDB 不是芒果(mango),它在拉丁文中的原意是...

  • MongoDB模式设计注意事项

    以下是在设计模式时需要考虑的几个关键方面。有一些数据库或硬件的限制是你需要了解的。你还需要考虑 MongoDB 的一些特殊之处,比如最大文档大小为 16MB、从磁盘读写完整文档、更新会重写整个文档,以及在文档级别...

  • MongoDB 进阶模式设计

    2015-12-17分类:TJ的博客/社区大咖博客评论(0) 12月12日上午,TJ在开源中国的年终盛典会上分享了文档模型设计的进阶技巧,就让我们...我的职责是为MongoDB的客户和用户提供MongoDB使用的一些最佳实践,包括模式设...

  • MongoDB 表设计

    12月12日上午,TJ在开源中国的年终盛典会上分享了文档模型设计的进阶技巧,就让我们来回顾一下吧: ——————————————————————————————————————————————————————...

  • mongodb数据模型设计

    内嵌是monodb建模的主要手段!一般建议的是先考虑内嵌, 直接按照你的对象模型来设计你的数据模型。如果你的对象模型数量不多,关系不是很复杂,那么恭喜你,可能直接一种对象对应一个集合就可以了。

  • mongodb详细优化策略方案

    – 模式设计 – 程序配置 一、安全措施 1.1 为MongoDB集群启用认证鉴权 MongoDB服务器在默认安装下不启用鉴权。这意味着每个人都可以直接连接到mongod实例并执行任意数据库操作。建议按照文档启用鉴权 ...

  • MongoDB的索引策略分析

    近期换了工作,新公司在数据持久化的方面的技术栈用到了MongoDB,遂有了这篇内容,旨在学习Mongo的同时,对Mongo的一些设计进行刨析分解。本篇主要侧重于MongoDB的索引存储策略与传统关系型数据库Mysql的对比与差异...

  • C++ 常见设计模式总结

    c++ 常见设计模式整理。

  • Mongodb模式设计

    中文社区 跳至内容 首页 博客 TJ的博客 ...MongoDB中文手册 线下用户组 资源 PPT 下载 官网博客列表 中文在线讲座 讲座通知 资料下载 关于 搜索: Mo

  • SpringBoot自动装配 Spring相关 常用设计模式 双亲委派 MongoDB Redis 适配器模式与策略模式

    SpringBoot自动装配Spring相关常用设计模式双亲委派MongoDBRedis适配器模式与策略模式

  • 2023年7月抖音美妆品牌社媒营销电商分析报告-里季、VC美妆、娇润泉

    本文详细分析了2023年7月抖音平台上美妆品牌「里季、VC美妆、娇润泉」的社媒营销和电商业绩。通过对销售额、直播销售、视频销售、热门商品、粉丝画像等方面的深入剖析,揭示了各品牌在抖音平台的成功之道。里季凭借创始人紫橙董事长的直播带货取得显著成绩,VC美妆则依靠素颜霜爆款和品牌自播,娇润泉通过洁面乳和精华液的推广,借助尾部达人视频切片和头部达人直播实现销售增长。

  • subscription-manager-rhsm-certificates-1.28.21-3.el8.x64-86.rpm.tar.gz

    1、文件说明: Centos8操作系统subscription-manager-rhsm-certificates-1.28.21-3.el8.rpm以及相关依赖,全打包为一个tar.gz压缩包 2、安装指令: #Step1、解压 tar -zxvf subscription-manager-rhsm-certificates-1.28.21-3.el8.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm

  • 力士乐驱动调试软件13v16中文版:伺服驱动与液压同步调试的技术详解及应用

    内容概要:本文详细介绍了力士乐驱动调试软件13v16中文版的特点及其在伺服驱动和液压同步调试中的应用。软件具有中文界面,便于理解和操作,涵盖参数设置、监控、诊断和调试四大模块。参数设置模块支持通过输入数值或拖动滑块调整电机速度和加速度;监控模块提供实时数据监测和图表展示;诊断模块帮助排查和解决问题;调试模块适用于高级调试如PID参数调整。此外,文中还分享了多个实用技巧,如批量修改参数、故障代码速查、动态链接库调用等。 适合人群:从事工业自动化、机电一体化领域的工程师和技术人员,尤其是对伺服驱动和液压控制系统有一定经验的人群。 使用场景及目标:①用于伺服驱动系统的调试,确保电机参数正确配置和稳定运行;②用于液压同步控制项目的调试,提高同步精度;③通过丰富的案例和技巧分享,帮助用户高效解决常见问题,提升工作效率。 其他说明:本文不仅介绍了软件的基本功能,还深入探讨了实际调试过程中的一些经验和技巧,为用户提供全面的指导和支持。

  • 计算机绘图-讲稿.pdf

    计算机绘图-讲稿.pdf

  • 计算机二级access历年真题及讲解.pdf

    计算机二级access历年真题及讲解.pdf

  • 计算机复习小结.pdf

    计算机复习小结.pdf

Global site tag (gtag.js) - Google Analytics