对大数据集或非常高吞吐量,仅复制还不够,还需将数据拆分,成为分区(partitions),也称分片(sharding)1。
分区 (partition),对应MongoDB、ES中的shard,HBase 的Region,Bigtable的tablet,Cassandra的vnode,Couchbase的vBucket。但分区 (partitioning)更普遍。
0.1 定义
每条数据(或每条记录,每行或每个文档)属于且仅属于某特定分区。每个分区都能视为一个完整小型数据库,虽然数据库可能存在跨分区操作。
0.2 目的
提高可扩展性。不同分区可放在一个无共享集群的不同节点。这样的一个大数据集可分散在更多磁盘,查询负载也随之分布到更多处理器。
- 本文先介绍分割大型数据集的方法,并观察索引如何与分区配合
- 然后讨论rebalancing,若想添加、删除集群中的节点,则须rebalancing
- 最后,概述DB如何将请求路由到正确的分区并执行查询
- 一种故意将大型DB分解成小型DB的方式。和网络分区(network partitions, netsplits) 无关,这是节点之间网络故障的一种。 ↩︎