1、预分片(shard)
mongodb通过对数据的横向切分,将一个collection的数据分布到不同的片中。不同的片可以部署在不同的主机上,在数据分布均衡的情况下,可以同时对不同片内的数据进行增删改查操作,从而提升整个系统的吞吐量。
mongodb存储数据的基本单元是chunk,chunk分布在各个片中,写入数据时,chunk会逐渐增大,当超过一个阀值时,会分裂成两个片,数据就会同时写入到这两个chunk中,因此,可以将mongodb的负载均衡功能看做是对chunk的负载均衡。如果该collection可以应用分片,mongodb会自动将某个chunk迁移到其他的片上。也可以手工拆分片,和将chunk在片之间做迁移。如果在collection建立后,数据写入前,对chunk进行拆分,并将chunk分布在集群的各个片中,这就是预分片。
实际上chunk的拆分和迁移并不只在collection未写入数据前操作,在任何时候都可以,但是官方不建议这么做,因为手工拆分可能会导致shard key分布不均匀。
2、片键(shard key)
一个collection中可以拿出一个或多个字段组成shard key,一个chunk中包含其中一段shard key的数据集合。在不同chunk之间,shard key是严格排序的。所以,一条数据只要计算出shard key就能知道它应该写入到哪个chunk中;只要知道了要查询数据的shard key,就能直接定位到chunk。Shard key必须是索引字段,因此,要在一个colletin上先建立索引,才能选择shard key。
(1)原始字段值作为shardkey