热门标签 | 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 要考虑的问题,第一点你要熟悉你的使用场景和你的业务。


推荐阅读
  • 服务器部署中的安全策略实践与优化
    服务器部署中的安全策略实践与优化 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
  • V8不仅是一款著名的八缸发动机,广泛应用于道奇Charger、宾利Continental GT和BossHoss摩托车中。自2008年以来,作为Chromium项目的一部分,V8 JavaScript引擎在性能优化和技术创新方面取得了显著进展。该引擎通过先进的编译技术和高效的垃圾回收机制,显著提升了JavaScript的执行效率,为现代Web应用提供了强大的支持。持续的优化和创新使得V8在处理复杂计算和大规模数据时表现更加出色,成为众多开发者和企业的首选。 ... [详细]
  • 触发器的稳态数量分析及其应用价值
    本文对数据库中的SQL触发器进行了稳态数量的详细分析,探讨了其在实际应用中的重要价值。通过研究触发器在不同场景下的表现,揭示了其在数据完整性和业务逻辑自动化方面的关键作用。此外,还介绍了如何在Ubuntu 22.04环境下配置和使用触发器,以及在Tomcat和SQLite等平台上的具体实现方法。 ... [详细]
  • 技术日志:Ansible的安装及模块管理详解 ... [详细]
  • MongoDB Aggregates.group() 方法详解与编程实例 ... [详细]
  • 本文详细介绍了在MySQL中如何高效利用EXPLAIN命令进行查询优化。通过实例解析和步骤说明,文章旨在帮助读者深入理解EXPLAIN命令的工作原理及其在性能调优中的应用,内容通俗易懂且结构清晰,适合各水平的数据库管理员和技术人员参考学习。 ... [详细]
  • 在本文中,我们将探讨如何在Docker环境中高效地管理和利用数据库。首先,需要安装Docker Desktop以确保本地环境准备就绪。接下来,可以从Docker Hub中选择合适的数据库镜像,并通过简单的命令将其拉取到本地。此外,我们还将介绍如何配置和优化这些数据库容器,以实现最佳性能和安全性。 ... [详细]
  • Swoole加密机制的安全性分析与破解可能性探讨
    本文深入分析了Swoole框架的加密机制,探讨了其在实际应用中的安全性,并评估了潜在的破解可能性。研究结果表明,尽管Swoole的加密算法在大多数情况下能够提供有效的安全保护,但在特定场景下仍存在被攻击的风险。文章还提出了一些改进措施,以增强系统的整体安全性。 ... [详细]
  • 如何优化MySQL数据库性能以提升查询效率和系统稳定性 ... [详细]
  • 小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限
    小王详解:内部网络中最易理解的NAT原理剖析,挑战你的认知极限 ... [详细]
  • MySQL 8.0 MGR 自动化部署与配置:DBA 和开源工具的高效解决方案
    MySQL 8.0 MGR 自动化部署与配置:DBA 和开源工具的高效解决方案 ... [详细]
  • 本文精选了几个结合 Vue 和 Spring Boot 的优质开源项目,适合开发者学习和参考。这些项目不仅涵盖了前后端分离的最佳实践,还提供了丰富的功能示例和详细的文档,有助于提升开发效率和技术水平。项目地址:https://github.com/ 示例链接。 ... [详细]
  • Linux学习精华:程序管理、终端种类与命令帮助获取方法综述 ... [详细]
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社区 版权所有