MongoDB简介

  MongoDB就是数据库,是一款致力于web应用程序和互联网基础设施而设计的数据库,是一种新型的Nosql数据库(Not only sql/New sql)
  为什么我们要用mongodb?在json数据愈发流行的今天,数据交互已经不那么的强制要求关系的联系。在一些场景下,mysql这样的关系型数据已经不是唯一的选择,而json的数据格式的操作也十分的方便,甚至一些场景json会更加的方便,现在的前后端分离接口,基本上都使用json进行数据交换,xml已经比较少见了。
  mongodb存储使用类json的数据结构bson来存储数据(就比json多一个ObjectId,如果不指定,mongodb会自动生成一个类似uuid)。一条bson数据类似与mysql中的一行数据,不同的是bson并不需要预先定义表结构,这样的数据模型设计,使得吞吐量大大提升相较于mysql等sql数据库。

MongoDB的主要特性

  1. 文档数据类型:

sql数据类型是有格式的,预先定义的,还可以添加外键的约束来保证数据的完整和准确,即使现在的数据库设计都不建议使用外键,因为它会给应用系统带来业务处理的复杂性。虽然mongodb在这一方面没有sql数据库这样标准化,有固定的Schema,但也就是因为这样,使数据的存储更加的灵活,也能使插入和查询效率大大提升。

  1. 即时查询能力

MongoDB拥有即使查询能力,插入完成之后可以马上查询到数据,而且保留了基于B-tree的索引,相较于同类型数据库elasticSearch就没有即时查询的能力,而redis也没有B-tree索引的能力。

  1. 自带复制能力

MongoDB自身提供了副本集功能,副本集能够将数据分布在多台机器上实现冗余(前提是在多态机器上部署副本,并配置),能够实现类似sql数据库的读写分离(这个则略可配置,读请求使用副本,写使用主库、读写都用主库等),副本集能够在主库故障的时候自动转移,提高了数据的安全性。

  1. 提供数据安全

MongoDB提供Journaling日志,类似mysql的binglog,插入数据的时候先会向日志中写入记录,然后完成写入操作,这样可以在断电重启时恢复数据;

  1. 数据扩展性

MongoDB天生支持数据分片,分片也许容易和副本集的概念混淆。分片指的是假设只有一台机器,存储了100%的数据,现在加了一台机器,那么每台机器存放50%的数据;副本集指的对mongodb中所有数据的一个复制类似主从备份,当存在分片的时候,则副本集对所有分片存在复制。这些特性在elasticSearch相同,elasticSearch需要在创建index的时候配置。

  1. 地理位置查询

MongoDB支持按经纬度范围查询,只要在文档数据中添加loc的地理位置(近卫度坐标),并建立成2dphere索引,就可以在查询的时候按经纬度范围查询距离内的左边点(附近的公交、地铁、餐饮等功能)。

  1. 使用js来操作mongodb工具行

sql数据库操作使用sql来操作数据库中的数据,而mongodb的命令行使用js语法操作,这对于初学者来说也是比较友好的,就类似于用js操作json。个人比较喜欢使用的mongodb数据可视化工具Robo 3t,但是这个工具并没有提供导入导出数据的能力,即使用js操作数据导入导出,也只能是少量的。mongodb提供了mongoimport和mongoexport来帮助我们导出导入数据,数据的格式可以是json,可以是csv或tsv,这就类似于mysql中的source text.sqlmysqldunm语句。

你一般如何使用MongoDB

  根据MongoDB的特性,类json形式的数据,高吞吐,即时查询能力自动分片,副本集,自动故障转移等等。
  但是MongoDB也有他的局限性,无事务的支持,无关联查询,无存储过程、触发器等等。
目前了解到的比较合理的使用场景:

  1. 作为复杂可编辑页面的临时存储环节,比如像编辑博客,编辑的时候的自动保存功能,可以将博客的草稿放置在mongodb中,以防编辑未完成浏览器卡死;
  2. 系统的关键性操作日志,数据交换记录等。例如一个管理系统有相当多的操作,而这些操作都被赋予了权限控制,管理员需要清楚的知道谁在这个系统中做了什么样的操作,可以将这些操作的信息保存下来,以便查询和追责;如果做过交易系统,订单之间有许多的通知回调等数据交换,例如对接支付宝、微信,他们的用户支付订单完成的通知通过http回调的方式,可以将这些回调的记录保存起来;
  3. 大批量的无关联数据。比如boss直聘中的简历。这些简历可以以json的形式保存下来,查询的时候按简历的标签来匹配。再比如现在的大屏数据,如果你的大屏数据不是假数据的化,一般来说动态变化的大屏是通过流式计算的方式将特定时间床的数据统计出来,按时间存储,然后通过大屏实现数据可视化。大屏的后端服务有很多都是node开发的,node和mongodb可以说是绝配。

上面的这些功能不是说一定要使用MongoDB,而是这些需求下使用MongoDB是相对合理的,但仅仅是个人观点。如果涉及到类似订单状态更新、库存更新等需要事务处理,MongoDB就不太合适了。MongoDB其实和ElasticSearch很像,而ElasticSearch最大的特性是它的反向索引,ElasticSearch的性能关键在于内存,个人觉得在考虑中间件选型的时候,成本也是一个比较关键的因素。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,193评论 6 498
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,306评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 162,130评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,110评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,118评论 6 388
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,085评论 1 295
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,007评论 3 417
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,844评论 0 273
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,283评论 1 310
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,508评论 2 332
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,667评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,395评论 5 343
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,985评论 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,630评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,797评论 1 268
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,653评论 2 368
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,553评论 2 352