加入收藏 | 设为首页 | 会员中心 | 我要投稿 晋中站长网 (https://www.0354zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

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

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

迁移:当分片中的数据大小不一时会产生迁移的动作,比如分片A的数据比较多,会将分片A里面的一些块转移到分片B里面去。分片集群通过在分片中移动块来实现均衡,是由名为均衡器的软件进程管理的,任务是确保数据在各个分片中保持均匀分布,当集群中拥有块最多的分片与拥有块最少分片的块差大于8时,均衡器就会发起一次均衡处理。

3.分片实战

启动两个副本集、三个配置服务器、一个mongos进程

配置分片

  1. sh.help() //查看分片相关帮助  
  2. sh.addShard() //添加分片  
  3. db,getSiblingDB("config").shards.find() //查看分片列表  
  4. sh.status() //分片详情  
  5. sh.enableSharding("cloud-docs") //开启一个数据库上的分片  
  6. db.getSiblingDB("config").databases,find() //查看数据库列表  
  7. sh.shardCollection("cloud-docs.spreadsheets",{username:1,_id:1}) //使用一个分片键定义一个分片集合spreadsheets,根据用户名进行切分  
  8. sh.getSiiblingDB("config").collections.findOne() //查看集合列表  
  9. db.chunks.count() //查看块的个数  
  10. db.chunks.findOne() //查看块的信息  
  11. db.changelog.count(}what:"split"|) //查看块切分日志  
  12. db.changelog.find({what:"moveChunk.commit"}).count() //查看日志迁移记录 

4.分片的查询与索引

(1)分片查询类型

  • 针对性查询:查询包含分片键
  • 全局查询或分散/聚集查:查询不包含分片键
  • 查询过程:通过分片键将查询路由给指定分片,一旦到了某个分片上,由分片自行决定使用哪个索引来执行该查询

(2)索引

每个分片都维护了自己的索引,当在分片集合上声明索引时,每个分片都会为它那部分集合构建独立的索引,每个分片上的分片集合都应该拥有相同的索引。

分片集合只允许在_id字段和分片键上添加唯一性索引,其他地方不行,因为这需要在分片间进行通信,实施起来很复杂。

当创建分片时,会根据分片键创建一个索引。

5.选择分片键

(1)分片键是不可修改的、分片键的选择非常重要

(2)低效的分片键

  • 分布性差:如使用BSON对象ID,那么会导致所有最新插入的文档都会落到某个很小的连续范围,无法分散插入
  • 缺乏局部性:升序分片键有明确的方向,完全随机的分片键则根本没有方向。前者无法分散插入,后者插入分散,如使用MD5作为分片键

(3)理想的分片键

  • 将插入数据均匀分布到各个分片上
  • 保证CRUD操作能够利用局部性 有足够的粒度进行块拆分
  • 满足这些要求的分片键通常由两个字段组成,第一个是粗粒度的,第二个粒度较细

6.生产环境中的分片

(1)部署拓扑

  • 复制mongod:需要独立的部署服务器
  • 配置服务器:配置服务器不需要有自己的机器

根据不同的数据中心划分

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

这里写图片描述

(2)最低要求

  • 副本集每个成员,无论是完整的副本集节点还是仲裁节点,都需要放在不同的机器上 每个用于复制的副本集成员都需要有自己的机器
  • 副本集仲裁节点很轻量级,和其他进程共用一台机器即可
  • 配置服务器也可以选择与其他进程共用一台机器

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

(3)配置的注意事项

需要估计集群大小,可使用以下命令对现有集合进行分片处理

  1. sh.splitAt("cloud-docs.spreadsheets",{"username":"chen","_id":ObjectId("")}) 
  2. //手动拆分块 
  3. sh.moveChunk("cloud-docs.spreadsheets",{username:"chen"},"shardB") 
  4. //手动将某分块移至分片B 
  5. db.runCommand({removeshard:"shard-1/arete:30100,arete:30101"})  
  6. //删除分片 
  7. db.runCommand({moveprimary:"test",to:"shard-0-test-rs"}); 
  8. //移动主分片 

(4)备份分片集群

备份分片时需要停止均衡器

  1. db.settings.update({_id:"ba;ancer"},{$set:{stopped:true},true}); 
  2. sh.setBalancerState(false); 
  3. //停止均衡器,此时均衡器将进行最后一轮均衡 
  4. db.locks.find({_id:"balancer"}); 
  5. sh.isBalancerRunning(); 
  6. //查看均衡器状态,任何状态大于0 的状态值都说明均衡器仍在进行中 

八、部署与管理

1.部署

(1)部署架构

使用64位机器、32位机器会制约mongodb的内存,使其最大值为1.5GB

(2)cpu

(编辑:晋中站长网)

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

热点阅读