当前位置:首页 > 文章列表 > 数据库 > MySQL > 聊聊MongoDB - MongoDB的使用感想

聊聊MongoDB - MongoDB的使用感想

来源:SegmentFault 2023-01-16 15:10:58 0浏览 收藏

小伙伴们有没有觉得学习数据库很有意思?有意思就对了!今天就给大家带来《聊聊MongoDB - MongoDB的使用感想》,以下内容将会涉及到MySQL、Redis、mongodb、NoSQL、Memcached,若是在学习中对其中部分知识点有疑问,或许看了本文就能帮到你!

简述

工作中经常接触MongoDB,学习上也有对它进行一些研究,感觉MongoDB这种Nosql类型的数据库给我在开发上带来很多便捷,同时也解决了很多程序开发过程中在性能上考虑优化的可行方案。然而最近我在思考MongoDB看起来很棒,用起来很舒服,但是我是否对其抱有过分自信和过分依靠它呢?我想聊聊MongoDB的一些我比较看重地方,还有它隐藏的一些缺陷(可能暂时不明显,但是日后可能会成为你自己亲手埋下的地雷)。

简述MongoDB和NoSQL

MongoDB

  • MongoDB,是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储解决方案。

  • MongoDB,是一个介于关系数据库(sql)和非关系数据库(nosql)之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型(这一点是我很喜欢,因为我经常会把一些经常使用的数据预先生成存进MongoDB,,相当于缓存的做法)。

  • Mongo,最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引(MongoDB的索引很多,没记错应该有7种,功能完善且强大,有力支持了高效查询)。

  • 目前MongoDB的最新版本为3.0+,最新版本的MongoDB在我看来更像sql的nosql数据库,功能更是越发强大。

NoSQL

  • NoSQL,泛指那些支持非关系型、分布式数据存储的数据库,最常见的解释是“non-relational”或“Not Only SQL”,而“NoSQL”一词最早于1998年被用于一个轻量级的关系数据库的名字。

  • NoSQL被我们用得最多的当数key-value存储,当然还有其他的文档型的(这个我用的比较多,其次是k-v存储)、列存储、图型数据库、xml数据库等。

  • NoSQL有很多优势:NoSQL数据库非常易于扩展;NoSQL数据库都具有非常高的读写性能,尤其在大数据量下,高性能更为突出;NoSQL在不太影响性能的情况,就可以方便的实现高可用的架构(这个观点我不太懂,网上给的经验,可能大平台才会体验到吧)。

  • 一些主流的NoSQL介绍:MongoDB;SequoiaDB;Cassandra。这是目前生产线上主流的三大NoSQL数据库,有兴趣大家可以去了解一下。

小结

通过简述MongoDB和NoSQL,相信我们对非关系型数据库的了解能有一定收获了吧,了解一件事物,首先我们必须认识它,现在我们认识了,接下来就是了解它了。

我与MongoDB

我与MongoDB的接触与感悟

  • 我对MongoDB的接触经常是进行数据整理,数据加工的时候会用到它,一般面对一些复制的涉及多表联合查询的业务逻辑时,我想跳过多表联合查询寻找在页面加载时程序获取数据的最快捷最高效的处理方案,这时MongoDB给了我一个不错的选择(因为MongoDB存储的是字符串文本而且是支持一对多关系结构),这给了我两个思考点:

  • 第一、我是否可以对复杂的数据进行预处理,放到MongoDB上面,页面需要用到的时候直接拿来用,这样我只需要读一次MongoDB就可以了,从而避免多次查表给服务器带来的压力,再说MongoDB对于高并发的负载能力也是很强大的。

  • 第二、面对一对多的映射关系我是否可以用MongoDB集合的一对多映射解决sql的多个关联表的冗杂。

  • 有的时候我甚至觉得MongoDB不再像是数据库,它更像是缓存服务器,因为它更多的是把数据预先存储以备日后使用,但是它跟sql数据库的最新数据往往不全是同步的,有一些出现延时的数据就是我想说的视为缓存的数据,那么问题就来了,怎么更好的保证数据的时效性,我不相信有人希望程序使用旧的数据,所以保持数据的新鲜应该是产品的最优需求,因为一个数据同步更新机制的建立很有必要,到底是定时更新方案还是sql内容更新同步方案好呢(我想出来的两个我认为可行的数据同步方案)?一切根据具体应用场景来具体操作。

  • 有的时候面对一些页面的数据是暂定不会变化,比如新闻内容,对象介绍信息等等一些内容数据,这些数据很少会更新,所以很多情况下会把它们放到MongoDB上,避免重复查表,也可以理解为缓存到MongoDB上面去了(我的理解),但是我们必须主要在程序上不能单单只依靠MongoDB或缓存上面的哪些数据,我们为了避免风险,应该在程序的最后加上原始数据的组装处理,保证数据准确性,因为没人能保证MongoDB永远可靠(这里就提到MongoDB的可靠性,这个争议比较大的,一些人说MongoDB的数据容易丢失,或者在数据迁移上出现问题等等),我的观点的永远不要相信数据库,我们要做好一切问题出现的准备,有备无患。

  • 还有一点就是我想分享一些MongoDB的使用经验(这个日后等我整理好资料后再更新)

总结

  • 码了这么多字,其实就是想说MongoDB很好用,但是不能对数据库太依靠太放心,它能为我们提供一些很不错的解决方案,但是我们必须在考虑使用它之前先做好任何它挂掉的准备,同样面对其他情况下也要有这种危机意识,数据库是不能尽信的,一场台风可能你的机房就没了,所以你要备份或者风险规避机制,应对突发的问题做好预案,保证程序系统安稳,这个才是重中之重!

  • 最后欢迎大家指正我的错误观点,分享你的观点看法和经验,大家一起学习一起进步吧。

好了,本文到此结束,带大家了解了《聊聊MongoDB - MongoDB的使用感想》,希望本文对你有所帮助!关注golang学习网公众号,给大家分享更多数据库知识!

版本声明
本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
一次 Discuz X3.2 切换数据库后无法登录的问题排查经历一次 Discuz X3.2 切换数据库后无法登录的问题排查经历
上一篇
一次 Discuz X3.2 切换数据库后无法登录的问题排查经历
【mysql的设计与优化专题(1)】ER图,数据建模与数据字典
下一篇
【mysql的设计与优化专题(1)】ER图,数据建模与数据字典
查看更多
最新文章
查看更多
课程推荐
  • 前端进阶之JavaScript设计模式
    前端进阶之JavaScript设计模式
    设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
    543次学习
  • GO语言核心编程课程
    GO语言核心编程课程
    本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
    516次学习
  • 简单聊聊mysql8与网络通信
    简单聊聊mysql8与网络通信
    如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
    500次学习
  • JavaScript正则表达式基础与实战
    JavaScript正则表达式基础与实战
    在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
    487次学习
  • 从零制作响应式网站—Grid布局
    从零制作响应式网站—Grid布局
    本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
    485次学习
查看更多
AI推荐
  • H2O EvalGPT:开源LLM大模型评估与排行榜工具
    H2O EvalGPT
    H2O EvalGPT是H2O.ai推出的开源LLM评估平台,提供详细的大模型性能排行榜、行业特定基准测试及A/B测试功能,助您快速选择最适合项目的高性能大语言模型。
    47次使用
  • SuperCLUE中文大模型评测基准:功能、能力维度与应用指南
    SuperCLUE
    SuperCLUE是权威的中文大语言模型综合评测基准,涵盖语言理解、知识应用、AI Agent智能体及安全性等12项核心能力。通过多轮对话与客观测试,定期发布榜单与技术报告,为模型研发、优化及行业选型提供科学依据。
    199次使用
  • C-Eval中文评测基准:大语言模型多学科能力评估指南
    C-Eval
    深入了解C-Eval中文评估套件,涵盖52个学科与4级难度。本文详解其功能特点、Zero-shot/Few-shot使用方法及代码示例,助您全面评测LLM中文理解与泛化能力。
    134次使用
  • AI Prompt Library:免费AI提示词库,助力ChatGPT高效创作与营销
    AI Prompt Library
    探索AI Prompt Library免费资源库,涵盖营销、写作及多场景AI提示词。兼容ChatGPT、Claude等工具,一键复制优化输出,提升工作效率。
    67次使用
  • Generrated:DALL·E 2/3 AI绘画提示词灵感库与图像对比平台
    Generrated
    Generrated汇集9300+张DALL·E生成图像及对应提示词,支持查看完整图集、对比DALL·E 2与3版本差异,是AI绘图新手学习Prompt设计与获取创作灵感的实用工具。
    47次使用