分片sharding概念
是指将数据拆分,将其分散在不同机器上的过程,有时也用分区来表示这个概念 可以理解为 mysql的分库
特性
支持自动分片,集群自动切分数据,做负载均衡。集合切分成小块,这些块分散到若干片里,每个片只负责总数据的一部分。统一通过一个路由进程mongos来管理,它记录所有数据的存放位置,所以不用知道什么数据需要查哪个片。没有分片客户端链接mongod,分片就连接mongos
片键
那么数据分片的规律,什么数据在什么分片中,这些是如何确定的?这就要说到片键了。选择集合里的一个键,根据这个键来将数据均衡分配到分片中。如果键的变化太少可以创建符合片键
何时分片
- 机器磁盘不够用
- 单个mongod 不能满足写数据的性能
- 想将大量数据放在内存中提高性能
如何分片
已有的集合:建立片键后自动分片
分片涉及到:片键、片、mongos、配置服务器(存放数据和片的关系、集群的信息,mogis来读取)
- 建立mongos进程,需要指明配置服务器的位置: mongos --port 30000 --configdb localhost:2000 分片的管理是通过 mongos的
- 添加片,其实就是添加mongod进程
- 连接mongos 为集群添加一个片、通过addshard命令添加片
- 切分数据,要打开 数据库的集合的分片功能
db.runCommand({"enablesharding":"foo"})
- 数据库级别启用分片后,可以用shardcollection命令对集合进行分片
生产
方案:
- 多个配置服务器
- 多个mongos服务器
- 每个片都是副本集
- 正确设置w