php mongo分片配置,MongoDB分片 - 晨曦断罪的个人空间 - OSCHINA - 中文开源技术交流社区...

1. 建立一个MongoDB集群(详见MongoDB集群搭建)

2.分片

要对一个集合分片,首先要对这个集合的数据库启用分片

sh.enableSharding(“test”)

对集合分片时需要指定片键。只有被索引过的键才能成为片键

db.user.ensureIndex({“username”:1})

依据username进行分片

sh.shardCollection(“test.users”,{“username”:1})

也可以使用复合片键

sh.shardCollection(“test.users”,{“username”:1,”age”:1})

//但当给定username的值时,可以快速路由,但是,若给定age,则需要查询全部分片

3.查询

包含片键的查询可以使mongos直接路由到制定分片,被称之为定向查询

而不包含片键的查询使得mongos不得不将查询请求在每个分片上查询一次,将结果聚合起来返回客户端,被称之为分散-聚集查询。

4.块拆分

当多mongos启动时,有些mongos只需要负责路由,而并不需要拆分。所以可以在启动mongos时使用 –nosplit 关闭块拆分

5.均衡器

负责数据迁移,查看config.locks集合,可知那个是均衡器

db.locks.findOne(“_id”:”balancer”);

6.选择片键的标准

计划做多少个分片

是否为了减少读写延迟

是否为了增加吞吐量

是否为了增加系统资源

7.数据分发

常用的片键通常有三种

升序片键

随机分发的片键

基于位置的片键

如果追求数据加载速度的极致,那么散列片键是最佳选择

创建一个三列片见,首先要创建散列索引

db.user.ensureIndex({“username”:”hashed”})

sh.shardCollection(“app.users”,{“username”:”hashed”})

使用GridFS则非常适合选择这种片键

db.fs.chunks.ensureIndex({“files_id”:”hashed”})

sh.shardCollection(“test.fs.chunks”,{“files_id”:”hashed”})

7.流水策略

当有一些更强大的服务器,我们则希望能它能承受更大的负载

为实现这种策略,需将最大范围的块指定在ssd分片上

sh.addShardTag(“shard-name”,”ssd”)

sh.addTagRange(“dbName.collName”{“_id”:ObjectId()}),

…{“_id”:MaxKey},”ssd”)

use config

var tag = db.tags.findOne({“ns”:”dbname.colname”},

“max”:{“shardKey”:”MaxKey”})

tag.min.shardKey = ObjectId()

db.tags.save(tag)

8.多热点

在集群中,分片最为高效;在单个mongod中写请求为升序更高效

可以使用复合片键,第一个为势较低的键,第二个为升序键。完美

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值