3.关注MongoDB schema 的设计模式
- 内嵌与引用:当子对象总是出现在父对象的上下文中时,使用内嵌文档;否则将子对象单独存一个集合 。
- 一对多的关系:在“多”的集合关系中添加id指向依赖的id 。
- 多对多:在其中一种对应关系中使用对象数组指向另外一个对象 。
- 树:具化路径,在树中的每个节点都包含一个path字段,该字段具体保存了每个节点祖先的id 。
- 动态属性:可以为不同的动态属性添加索引,如果需要将属性圈在一个范围,那么可以通过key-value的方式,然后在统一的key上面加索引 。
- 关于事务:如果需要事务支持,那么只能选择另一种数据库,或者提供补偿性事务来解决事务的问题 。
- 不能创建没用的索引
- 不能在同一个字段中存不同的类型
- 不能把多类实体都放在一个集合里 不能创建体积大、嵌套深的文档
- 不能过多的创建集合,集合、索引、数据库的命名空间都是有限的
- 不能创建无法分片的集合
4.关注MongoDB里面一些具体细节(1)关注数据库的概念数据库是集合的逻辑与物理分组,MongoDB没有提供创建数据库的语法,只有在插入集合时,数据库才开始建立 。创建数据库后会在磁盘分配一组数据文件,所有集合、索引和数据库的其他元数据都保存在这些文件中,查阅数据库使用磁盘状态可通过 。
db.stats(2)关注集合概念
集合是结构上或概念上相似得文档的容器,集合的名称可以包含数字、字母或 . 符号,但必须以字母或数字开头,完全 。
限定集合名不能超过128个字符,实际上 . 符号在集合中很有用,能提供某种虚拟命名空间,这是一种组织上的原则,和其他集合是一视同仁的 。在集合中可以使用 。
system.namespaces //查询当前数据库中定义的所有命名空间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)稀疏索引
如索引的字段会出现的值,或是大量文档都不包含被索引的键 。
3.索引的构建问题如果数据集很大时,构建索引将会花费很长的时间,且会影响程序性能,可通过
db.currentOp //查看索引的构建时间当使用 mongorestore 时会重新构建索引 。当曾经执行过大规模的删除时,可使用
db.values.reIndex 对索引进行压缩,重建 。
4.识别慢查询(1)查阅慢查询日志
grep -E '([0-9])+ms' mongod.log //使用grep 命令 识别命令信息db.setProfillingLevel(2) //使用解刨器,将记录每次的读写到日志db.setProfillingLevel(1) //只记录慢(100ms)操作(2)分析慢查询
db.values.find({}).sort({close:-1}).limit(1).explain
- scanOrder 字段表明没有使用索引
- 【MongoDB 是什么?】cursor当没有索引时,用的是BasicCursor,当使用索引时使用的是BtreeCursor
- n 表示需要返回的结果集
- nscanned表示需要遍历的文档数 indexBounds 表示索引边界
六、MongoDB副本集本节同样主要简单呈现MongoDB副本集搭建的简易性,与副本集的强壮性,监控容易性
1.为什么要使用副本集提供主从复制能力,热备能力,故障转移能力
2.构建方式rs.initiaters.add("localhost:40001")rs.add("localhost:40002",{arbiterOnly:true})
推荐阅读
- 周公解梦梦见很多硬币 梦见很多硬币是什么意思
- 梦见一个女人和我暧昧 梦见和美女暧昧是什么意思
- 淘宝直播双十一排位赛 淘宝直播排位赛是什么意思
- 梦到蛇吃人是什么寓意 梦到蛇吃人了什么预兆
- 淘宝618是什么节日 淘宝有618吗
- 淘宝平台的违约金一般是多少 淘宝违约金的赔付形式是什么
- 梦见地下冒水出来地要塌 梦见地下冒水出来是什么意思
- 世界上最古老的四种文字分别是什么 世界上最古老的三大文字
- 周公解梦梦见大火烧山 梦见大火烧山是什么梦
- 梦到生男孩有什么预兆周公解梦 梦到生男孩子是什么意思