聊聊MongoDB - MongoDB的使用感想
来源:SegmentFault
时间:2023-01-16 15:10:58 475浏览 收藏
小伙伴们有没有觉得学习数据库很有意思?有意思就对了!今天就给大家带来《聊聊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学习网公众号,给大家分享更多数据库知识!
-
499 收藏
-
286 收藏
-
244 收藏
-
235 收藏
-
157 收藏
-
368 收藏
-
475 收藏
-
266 收藏
-
273 收藏
-
283 收藏
-
210 收藏
-
- 前端进阶之JavaScript设计模式
- 设计模式是开发人员在软件开发过程中面临一般问题时的解决方案,代表了最佳的实践。本课程的主打内容包括JS常见设计模式以及具体应用场景,打造一站式知识长龙服务,适合有JS基础的同学学习。
- 立即学习 542次学习
-
- GO语言核心编程课程
- 本课程采用真实案例,全面具体可落地,从理论到实践,一步一步将GO核心编程技术、编程思想、底层实现融会贯通,使学习者贴近时代脉搏,做IT互联网时代的弄潮儿。
- 立即学习 507次学习
-
- 简单聊聊mysql8与网络通信
- 如有问题加微信:Le-studyg;在课程中,我们将首先介绍MySQL8的新特性,包括性能优化、安全增强、新数据类型等,帮助学生快速熟悉MySQL8的最新功能。接着,我们将深入解析MySQL的网络通信机制,包括协议、连接管理、数据传输等,让
- 立即学习 497次学习
-
- JavaScript正则表达式基础与实战
- 在任何一门编程语言中,正则表达式,都是一项重要的知识,它提供了高效的字符串匹配与捕获机制,可以极大的简化程序设计。
- 立即学习 487次学习
-
- 从零制作响应式网站—Grid布局
- 本系列教程将展示从零制作一个假想的网络科技公司官网,分为导航,轮播,关于我们,成功案例,服务流程,团队介绍,数据部分,公司动态,底部信息等内容区块。网站整体采用CSSGrid布局,支持响应式,有流畅过渡和展现动画。
- 立即学习 484次学习
-
- 狂野的帆布鞋
- 太全面了,已加入收藏夹了,感谢up主的这篇博文,我会继续支持!
- 2023-07-06 23:46:04
-
- 怡然的小甜瓜
- 感谢大佬分享,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,看完之后很有帮助,总算是懂了,感谢博主分享文章!
- 2023-05-27 16:23:39
-
- 爱笑的大侠
- 好细啊,mark,感谢老哥的这篇博文,我会继续支持!
- 2023-04-25 11:20:35
-
- 还单身的高跟鞋
- 这篇技术文章太及时了,师傅加油!
- 2023-04-14 05:07:12
-
- 淡定的缘分
- 这篇技术贴太及时了,博主加油!
- 2023-04-10 09:23:39
-
- 要减肥的金鱼
- 这篇博文太及时了,好细啊,受益颇多,收藏了,关注博主了!希望博主能多写数据库相关的文章。
- 2023-04-10 02:40:14
-
- 苹果乌冬面
- 这篇技术文章真及时,好细啊,感谢大佬分享,已收藏,关注楼主了!希望楼主能多写数据库相关的文章。
- 2023-04-09 23:11:41
-
- 无限的宝贝
- 太给力了,一直没懂这个问题,但其实工作中常常有遇到...不过今天到这,帮助很大,总算是懂了,感谢楼主分享技术贴!
- 2023-01-27 06:09:17