mongodb 分片键的特点,选择条件及分片原则
1、集群cluster:包含多个分片
分片shard:包含多个chunk
块chunk:包含多个文档
文档doc:包含shard key 的一行数据
片键shard key:文档中的一个字段
复制集
分片demo:
2._id 自增作为片键的特点,邮件业务:
块的基数大小:要非常大,避免一个chunk太大
写分布:_id 片键自增,连续写到chunk1,chunk2,导致chunk1,chunk2过大,副本移动数据慢
定向查询:一般不用邮件id来查邮件
3._id hashed作为片键的特点,邮件业务:
块的基数大小:id hashed 后也足够大,随机均衡分布在不同的分片上
写分布:_id 随机均衡分布在不同的分片上
定向查询:一般不用邮件id来查邮件,所以每次查询都要到所有节点查询数据,比较慢
4._userid作为片键的特点,邮件业务:
块的基数大小:太小,一个用户的邮件都写到一个块里,时间久了,一个块的数据非常大,不好移动
写分布:_id 随机均衡分布在不同的分片上
定向查询:一般不用邮件id来查邮件,所以每次查询都要到所有节点查询数据,比较慢
组合片键:
5. {userid:1,time:1}作为组合片键的特点,邮件业务:
块的基数大小:基数足够大
写分布:能分布写到不同的块分片上
定向查询:一般会用userid来查数据,能很好的定位到分片上查询数据,不用查询所有的分片;
综合总结:组合片键来给mongodb分片比较好,能满足基数比较大,写分布也可以写到不同的分片上,也可以根据业务常用的使用情景查询部分节点就可以查到数据,不用查询所有节点提高查询速度。
mongodb 块的原因:
刷盘机制,缓存机制100秒,日志文件,刷盘时间60秒后刷到磁盘
写比较多没有查询,可以修改缓存100秒的时间,修改大,这样提高写的速度,多次提交,减少刷盘此时,每次刷盘的数据量会增大
标签:原则,mongodb,查询,分片,片键,id,邮件 From: https://www.cnblogs.com/csj007523/p/16863600.html