设为首页 收藏本站
查看: 903|回复: 0

[经验分享] MongoDB(1): 安装与配置及简介

[复制链接]

尚未签到

发表于 2018-10-25 11:11:02 | 显示全部楼层 |阅读模式
  一.简介
  MongoDB一种非关系型数据库(NoSql),是一种强大、灵活、可扩展的数据存储方式,因为MongoDB是文档模型,自由灵活很高,可以让你在开发过程中畅顺无比,对于大数据量、高并发、弱事务的互联网应用,MongoDB可以应对自如,MongoDB内置的水平扩展机制提供了从百万到十亿级别的数据量处理能力,还对MapReduce式聚合的支持,以及对地理空间索引的支持。
  1.1、为什么需要NoSQL
  简单的说,就是为了解决在web2.0时代,出现的三高要求:
  1:对数据库高并发读写的需求
  2:对海量数据的高效率存储和访问的需求
  3:对数据库的高可扩展性和高可用性的需求
  而RDB(关系型数据库)里面的一些特性,在web2.0里面往往变得不那么重要,比如:
  1:数据库事务一致性
  2:数据库的实时读写
  3:复杂的SQL查询,特别是多表关联查询
  1.2、CAP定理
  CAP定理, 又被称作布鲁尔定理(Eric Brewer)它指出对于一个分布式计算系统来说,不可能同时满足以下三点:
  1:强一致性(Consistency):系统在执行过某项操作后仍然处于一致的,在分布式系统中,更新操作执行成功后所有的用户都应该读取到最新的值,这样的系统被认为具有强一致性
  2:可用性(Availability):每一个操作总是能够在一定的时间内返回结果
  3:分区容错性(Partition tolerance):系统在存在网络分区的情况下仍然可以接受请求并处理,这里网络分区是指由于某种原因网络被分成若干个孤立区域,而区域之间互不相通
  根据CAP原理将数据库分成了满足CA原则、满足CP原则和满足AP原则三大类:
  1:CA:单点集群,满足一致性,可用性,通常在可扩展性上不太强大,比如RDB
  2:CP:满足一致性和分区容错性,通常性能不是特别高,如分布式数据库
  3:AP:满足可用性和分区容错性,通常可能对一致性要求低一些,如大多数的NoSQL
  BASE原理(Basically Available,Soft-state,Eventual consistency )
  1:基本可用(Basically Available):系统能够基本运行、一直提供服务。
  2:软状态(Soft-state):系统不要求一直保持强一致状态。
  3:最终一致性(Eventual consistency):系统需要在某一时刻后达到一致性要求
  1.3、NoSQL的优缺点
  优点
  1、扩展简单方便,尤其是水平横向扩展
  (纵向扩展是指用更强的机器;横向扩展是指把数据分散到多个机器)
  2、读写快速高效,多数都会映射到内存操作
  3、成本低廉,用普通机器,分布式集群即可
  4、数据模型灵活,没有固定的数据模型
  NoSQL的缺点
  不提供对SQL的支持
  现有产品还不够成熟稳定,功能也还有待加强
  1.4、mongodb的特点
  高性能、易于使用、易于扩展、功能丰富
  面向集合存储,模式自由
  支持动态查询,支持javascript表达式查询
  支持完全索引,包含内部对象
  支持复制和故障恢复
  支持副本集复制和自动故障恢复
  自动处理分片
  使用高效的二进制数据储存,包括大型对象
  文件存储格式为BSON(一种JSON的扩展)
  二.基本概念
  数据库
  MongoDB的一个实例可以拥有一个或多个相互独立的数据库,每个数据库都有自己的集合
  文档(document):是MongoDB中数据的基本单元
  非常类似于关系型数据库系统中的行(但是比行要复杂的多)
  注意:
  每一个文档都有一个特殊的键”_id”,它在文档所处的集合中是唯一的,相当于关
  系数据库中的表的主键
  集合(collection):就是一组文档
  类似于关系型数据库系统中的表
  _id
  每个文档都有个特殊的“_id”,在文档所属集合中是唯一的
  JavaScript shell
  MongoDB自带了一个功能强大的JavaScript Shell,可以用于管理或操作MongoDB
  MongoDB的单个计算机可以容纳多个独立的数据库,每一个数据库都有自己的集合和权限。
  MongoDB自带简介但功能强大的JavaScript shell,这个工具对于管理MongoDB实例和操作数据作用非常大
  注意:MongoDB中没有主外键的概念
  三.规则与数据类型
  3.1、数据库名称定义规则
  1、不能是空串
  2、不得含有/、\、?、$、空格、空字符等等,基本只能使用ASCII中的字母和数字
  3、区分大小写,建议全部小写
  4、最多为64字节
  5、不得使用保留的数据库名,比如:admin,local,config
  注意:数据库最终会成为文件,数据库名就是文件的名称
  3.2、集合名称定义规则
  1、不能是空串
  2、不能包含\0字符(空字符),这个字符表示集合名的结束,也不能包含”$”
  3、不能以”system.”开头,这是为系统集合保留的前缀
  3.3、文档的键的定义规则
  1、不能包含\0字符(空字符),这个字符表示键的结束
  2、“.”和“$”是被保留的,只能在特定环境下用
  3、区分类型,同时也区分大小写
  4、键不能重复
  注意:文档的键值对是有顺序的,相同的键值对如果有不同顺序的话,也是不同的文档
  3.4、数据类型
  数据类型                描述                                     举例
  null              表示空值或者未定义的对象                              {"x":null}
  布尔值            真或者假:true或者false                               {"x":true}
  32位整数            shell不支持该类型,默认会转换成64位浮点数,也可以使用NumberInt类,比如:     {“x”:NumberInt(“3”)}
  64位整数            shell不支持该类型,默认会转换成64位浮点数,也可以使用NumberLong类,比如:     {“x”:NumberLong(“3”)}
  64位浮点数          shell中的数字就是这一种类型                             {"x":3.14,"y":3}
  字符串            UTF-8字符串                                     {"foo":"bar"}
  符号             shell不支持,shell会将数据库中的符号类型的数据自动转换成字符串
  对象id             文档的12字节的唯一id                               {"id": ObjectId()}
  日期             从标准纪元开始的毫秒数                               {"date":new Date()}
  正则表达式          文档中可以包含正则表达式,遵循JavaScript的语法                  {"foo":/foobar/i}
  代码             文档中可以包含JavaScript代码                            {"x":function() {}}
  未定义             undefined                                    {"x":undefined}
  数组             值的集合或者列表                                 {"arr": ["a","b"]}
  内嵌文档           文档可以作为文档中某个key的value                          {"x":{"foo":"bar"}}


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-626278-1-1.html 上篇帖子: golang解析mongodb中的ISODate类型 下篇帖子: 分布式文档存储数据库 MongoDB
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表