加入收藏 | 设为首页 | 会员中心 | 我要投稿 辽源站长网 (https://www.0437zz.com/)- 云专线、云连接、智能数据、边缘计算、数据安全!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

MongoDB是什么,怎么用?看完你就知道了

发布时间:2019-06-06 06:52:55 所属栏目:MySql教程 来源:Java识堂
导读:一、概述 1.MongoDB是什么?用一句话总结 MongoDB是一款为web应用程序和互联网基础设施设计的数据库管理系统。没错MongoDB就是数据库,是NoSQL类型的数据库。 2.为什么要使用MongoDB? (1)MongoDB提出的是文档、集合的概念,使用BSON(类JSON)作为其数

这里只举例了简单的链接与简单的MongoDB操作,可见其操作的容易性。使用驱动时是基于TCP套接字与MongoDB进行通信的,如果查询结果较多,恰好无法全部放进第一服务器中,将会向服务器发送一个getmore指令获取下一批查询结果。

插入数据到服务器时间,不会等待服务器的响应,驱动会假设写入是成功的,实际是使用客户端生成对象id,但是该行为可以通过配置配置,可以通过安全模式开启,安全模式可以校验服务器端插入的错误。

四、schema 设计原则

1.需要关注MongoDB的自身的特性

要清楚了解MongoDB的基本数据单元。在关系型数据库中有带列和行的数据表。而MongoDB数据的基本单元是BSON文档,在键值中有指向不定类型值的键,MongoDB拥有即时查询,但不支持联结操作,简单的键值存储只能根据单个键来获取值,不支持事务,但支持多种原子更新操作。

2.需要关注系统本身的读写特性

如读写比是怎样的,需要何种查询,数据是如何更新的,会不会存在什么并发问题,数据结构化的程度是要求高还是低。系统本身的需求决定mysql还是MongoDB。

3.关注MongoDB schema 的设计模式

  • 内嵌与引用 :当子对象总是出现在父对象的上下文中时,使用内嵌文档;否则将子对象单独存一个集合。
  • 一对多的关系 :在“多”的集合关系中添加id指向依赖的id。
  • 多对多 :在其中一种对应关系中使用对象数组指向另外一个对象。
  • 树 :具化路径,在树中的每个节点都包含一个path字段,该字段具体保存了每个节点祖先的id。
  • 动态属性 :可以为不同的动态属性添加索引,如果需要将属性圈在一个范围,那么可以通过key-value的方式,然后在统一的key上面加索引。
  • 关于事务 :如果需要事务支持,那么只能选择另一种数据库,或者提供补偿性事务来解决事务的问题。

在关于schema 的设计中要注意一些原则,比如:

  • 不能创建没用的索引
  • 不能在同一个字段中存不同的类型
  • 不能把多类实体都放在一个集合里 不能创建体积大、嵌套深的文档
  • 不能过多的创建集合,集合、索引、数据库的命名空间都是有限的
  • 不能创建无法分片的集合

4.关注MongoDB里面一些具体细节

(1)关注数据库的概念

数据库是集合的逻辑与物理分组,MongoDB没有提供创建数据库的语法,只有在插入集合时,数据库才开始建立。创建数据库后会在磁盘分配一组数据文件,所有集合、索引和数据库的其他元数据都保存在这些文件中,查阅数据库使用磁盘状态可通过。

  1. db.stats() 

(2)关注集合概念

集合是结构上或概念上相似得文档的容器,集合的名称可以包含数字、字母或 . 符号,但必须以字母或数字开头,完全。

限定集合名不能超过128个字符,实际上 . 符号在集合中很有用,能提供某种虚拟命名空间,这是一种组织上的原则,和其他集合是一视同仁的。在集合中可以使用。

  1. system.namespaces //查询当前数据库中定义的所有命名空间 
  2. system.indexes //存储当前数据库的所有索引定义 

(3)关注文档

其次是键值,在MongoDB里面所有的字符串都是UTF-8类型。数字类型包括double、int、long。日期类型都是UTC格式,所以在MongoDB里面看到的时间会比北京时间慢8小时。整个文档大小会限制在16m以内,因为这样可以防止创建难看的数据类型,且小文档可以提升性能,批量插入文档理想数字范围是10~200,大小不能超过16MB。

五、索引与查询优化

1.索引的经验法则

(1)索引能显著减少获取文档的所需工作量,具体的对比可以通过 .explain()方法进行对比

(2)解析查询时MongoDB通过最优计划选择一个索引进行查询,当没有最适合索引时,会先不同的使用各个索引进行查询,最终选出一个最优索引做查询

(3)如果有一个a-b的复合索引,那么仅针对a的索引是冗余的

(4)复合索引里的键的顺序是很重要的

2.索引类型

(1)单键索引

(2)复合索引

(3)唯一性索引

(4)稀疏索引

如索引的字段会出现null的值,或是大量文档都不包含被索引的键。

3.索引的构建问题

如果数据集很大时,构建索引将会花费很长的时间,且会影响程序性能,可通过

  1. db.currentOp() //查看索引的构建时间 

当使用 mongorestore 时会重新构建索引。当曾经执行过大规模的删除时,可使用

  1. db.values.reIndex()  

对索引进行压缩,重建。

4.识别慢查询

(1)查阅慢查询日志

  1. grep -E '([0-9])+ms' mongod.log //使用grep 命令 识别命令信息 
  2. db.setProfillingLevel(2) //使用解刨器,将记录每次的读写到日志 
  3. db.setProfillingLevel(1) //只记录慢(100ms)操作 

(编辑:辽源站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

推荐文章
    热点阅读