热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

MONGODB那种设计更适合

最近工作的场景,发现很多场景适合MONGODB发挥它的长处。比如经常变动的需求,有些需求在开发告一段落后,预估还有变动看似不合理,其实在现实中处处可见,需求不完善,需求不明确,需求

MONGODB 那种设计更适合

最近工作的场景,发现很多场景适合MONGODB 发挥它的长处。

比如经常变动的需求,有些需求在开发告一段落后,预估还有变动看似不合理,其实在现实中处处可见,需求不完善,需求不明确,需求由于某些原因修改。 

这样的事情传统数据库处理上会比较费劲,除了表设计上要费工夫,改来改去,同时表设计时还要考虑性能问题,等等,让本来可以关注应用开发的developer,必须要费精力在 系统性能和设计和优化上。当然必要的设计和优化是应该的,而有些数据库必须要精益求精,否则就还你颜色。

相对来说,有些企业和开发人员更细化在合适的场景去使用“皮实”的数据库,来解决适合的业务场景,也让运维人员减少,ICU的“风险”.(老大半夜给你打电话,心惊肉跳的,不去ICU才怪)。

所以,如果可以MONGODB 数据库其实是一个好的选择。但很多人初用MONGODB ,不大清楚MONGODB 的设计方法和规则,这点是让人遗憾的,好东西只有知道怎么用才能更好的服务。

MONGODB 主要的设计方法不外乎

一 对 少数几个,一般来说这个场景是我们比较常见的, 例如我们想记录某个产品的组成部分,例如薯片,是由 棕榈油,马铃薯粉,调味粉,盐组成的。我们可写些什么?

{

  name: 薯片

  type:   膨化类

  原料配料:[

{组成:马铃薯粉, 来源:进口,地区:俄罗斯},

{组成:棕榈油  ,  来源:进口  ,地区:菲律宾},

{组成:调味粉,  来源:进口, 地区:日本},

....... 等等

            ]

}

一对 很多, 这样的情况,例如运动产品零件,每个机械上几十个零件,而上面的设计明显是不大合适。

怎么办,我们可以对建立两个collectiton,甚至多个collections , 以下仅仅为举例,考虑不周。

例如我们建立 机械 collection

{  机械名称:跑步机

   类型:民用,

   机械编号: 329839843

   包含零件: [

  objectID('039048dx89c8'),

 objectID('03948dx89c8'),

 objectID('039048fx89c8'),

  objectID('0390dfdx89c8'),

........

                  ]

   

}

而具体每个零件的信息则在另一个collection中

零件

{

 _id: objectID('0390dfdx89c8'),

零件材料:金属,

零件来源: 美国

零件尺寸:3.8M

......

}

比如要查询这个产品的零件组成

我们可以这样做

产品= db.产品.findOne({机械编号: 329839843})

产品零件= db.零件.find({_id:{$in:产品.包含零件}}).toArray();

两步将数据获取,大家可以注意,这样获取信息看似需要两步,不如传统数据库一个SQL 就可以解决问题,但实际上,从获取信息的速度,以及日后的维护和设计上来说是好的,

例如,这个产品又增加了几个零件,你要怎么办,建立字段,然后把这些零件加进去,那过两天,零件的数目又减少了怎么办?

这对MONGODB 这样的额数据库是在合适不过,对于灵活的经常出人思维左右的任务,他都能比较好的完成。

这里再举一个极端的例子,我们将日志存入到MONGODB ,比如我们有上千台机器的应用日志。

我们可以根据机器的信息建立一个collection, 同时,建立一个collection来存日志,(MONGODB的吞吐量,你不用担心,只要你给内存,SSD,纳秒也不是问题)。

机器信息:

{ _id:objectID('dfa384782374'),

  name: 数据库

  ip地址:192.168.91.12

}

告警信息:

{

  时间: ISODATE("2019-09-09T09:23:09.234Z")

 信息:'memory OOM'

host:objectID('dfa384782374')

}

查询也是方便的,

host=db.机器信息.findOne({ip地址:192.168.91.12})

最新日志报错100条

msg=db.告警信息.find({host:host._id}),sort({时间:-1}).limit(100) 

其实MONGODB 的collection的设计方式很多,当然需要根据MOINGODB的方式来设计,例如是嵌套多好,还是数组使用多好,是尽量把信息忘一个COLLECTION 塞,还是分散点好,key  的设计有么有注意事项等等,这都是在设计MONGODB 要考虑的问题,第一点你要熟悉你的使用场景和你的业务。


推荐阅读
  • Oracle分析函数first_value()和last_value()的用法及原理
    本文介绍了Oracle分析函数first_value()和last_value()的用法和原理,以及在查询销售记录日期和部门中的应用。通过示例和解释,详细说明了first_value()和last_value()的功能和不同之处。同时,对于last_value()的结果出现不一样的情况进行了解释,并提供了理解last_value()默认统计范围的方法。该文对于使用Oracle分析函数的开发人员和数据库管理员具有参考价值。 ... [详细]
  • 2018年人工智能大数据的爆发,学Java还是Python?
    本文介绍了2018年人工智能大数据的爆发以及学习Java和Python的相关知识。在人工智能和大数据时代,Java和Python这两门编程语言都很优秀且火爆。选择学习哪门语言要根据个人兴趣爱好来决定。Python是一门拥有简洁语法的高级编程语言,容易上手。其特色之一是强制使用空白符作为语句缩进,使得新手可以快速上手。目前,Python在人工智能领域有着广泛的应用。如果对Java、Python或大数据感兴趣,欢迎加入qq群458345782。 ... [详细]
  • 一、Hadoop来历Hadoop的思想来源于Google在做搜索引擎的时候出现一个很大的问题就是这么多网页我如何才能以最快的速度来搜索到,由于这个问题Google发明 ... [详细]
  • Monkey《大话移动——Android与iOS应用测试指南》的预购信息发布啦!
    Monkey《大话移动——Android与iOS应用测试指南》的预购信息已经发布,可以在京东和当当网进行预购。感谢几位大牛给出的书评,并呼吁大家的支持。明天京东的链接也将发布。 ... [详细]
  • 云原生边缘计算之KubeEdge简介及功能特点
    本文介绍了云原生边缘计算中的KubeEdge系统,该系统是一个开源系统,用于将容器化应用程序编排功能扩展到Edge的主机。它基于Kubernetes构建,并为网络应用程序提供基础架构支持。同时,KubeEdge具有离线模式、基于Kubernetes的节点、群集、应用程序和设备管理、资源优化等特点。此外,KubeEdge还支持跨平台工作,在私有、公共和混合云中都可以运行。同时,KubeEdge还提供数据管理和数据分析管道引擎的支持。最后,本文还介绍了KubeEdge系统生成证书的方法。 ... [详细]
  • 本文介绍了如何使用php限制数据库插入的条数并显示每次插入数据库之间的数据数目,以及避免重复提交的方法。同时还介绍了如何限制某一个数据库用户的并发连接数,以及设置数据库的连接数和连接超时时间的方法。最后提供了一些关于浏览器在线用户数和数据库连接数量比例的参考值。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • RouterOS 5.16软路由安装图解教程
    本文介绍了如何安装RouterOS 5.16软路由系统,包括系统要求、安装步骤和登录方式。同时提供了详细的图解教程,方便读者进行操作。 ... [详细]
  • Iamtryingtomakeaclassthatwillreadatextfileofnamesintoanarray,thenreturnthatarra ... [详细]
  • 知识图谱——机器大脑中的知识库
    本文介绍了知识图谱在机器大脑中的应用,以及搜索引擎在知识图谱方面的发展。以谷歌知识图谱为例,说明了知识图谱的智能化特点。通过搜索引擎用户可以获取更加智能化的答案,如搜索关键词"Marie Curie",会得到居里夫人的详细信息以及与之相关的历史人物。知识图谱的出现引起了搜索引擎行业的变革,不仅美国的微软必应,中国的百度、搜狗等搜索引擎公司也纷纷推出了自己的知识图谱。 ... [详细]
  • 本文详细介绍了MysqlDump和mysqldump进行全库备份的相关知识,包括备份命令的使用方法、my.cnf配置文件的设置、binlog日志的位置指定、增量恢复的方式以及适用于innodb引擎和myisam引擎的备份方法。对于需要进行数据库备份的用户来说,本文提供了一些有价值的参考内容。 ... [详细]
  • Spring特性实现接口多类的动态调用详解
    本文详细介绍了如何使用Spring特性实现接口多类的动态调用。通过对Spring IoC容器的基础类BeanFactory和ApplicationContext的介绍,以及getBeansOfType方法的应用,解决了在实际工作中遇到的接口及多个实现类的问题。同时,文章还提到了SPI使用的不便之处,并介绍了借助ApplicationContext实现需求的方法。阅读本文,你将了解到Spring特性的实现原理和实际应用方式。 ... [详细]
  • MACElasticsearch安装步骤及验证方法
    本文介绍了MACElasticsearch的安装步骤,包括下载ZIP文件、解压到安装目录、启动服务,并提供了验证启动是否成功的方法。同时,还介绍了安装elasticsearch-head插件的方法,以便于进行查询操作。 ... [详细]
  • 本文介绍了Hyperledger Fabric外部链码构建与运行的相关知识,包括在Hyperledger Fabric 2.0版本之前链码构建和运行的困难性,外部构建模式的实现原理以及外部构建和运行API的使用方法。通过本文的介绍,读者可以了解到如何利用外部构建和运行的方式来实现链码的构建和运行,并且不再受限于特定的语言和部署环境。 ... [详细]
  • 本文介绍了Perl的测试框架Test::Base,它是一个数据驱动的测试框架,可以自动进行单元测试,省去手工编写测试程序的麻烦。与Test::More完全兼容,使用方法简单。以plural函数为例,展示了Test::Base的使用方法。 ... [详细]
author-avatar
网吧b国漫救星
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有