数据管理中分片是什么 不是区块链中的分片

参考官方文档:
https://docs.mongodb.com/manual/sharding/




分片是在多个机器中访问分布式数据的一种方式。
在大量数据和吞吐量的系统中。有两种解决系统增长的方法:垂直和水平扩展。


垂直扩展涉及增加单个服务器的容量,例如使用更强大的CPU,添加更多RAM或增加存储空间量。对于单个机器的给定工作负载而言足够强大。 此外,基于云的提供商基于可用的硬件配置具有硬性上限。 所以,垂直缩放有实际的最大值。


水平扩展涉及划分系统数据集并加载多个服务器,添加其他服务器以根据需要增加容量。 虽然单个机器的总体速度或容量可能不高,但每台机器处理整个工作负载的子集,可能提供比单个高速大容量服务器更高的效率。 扩展部署容量只需要根据需要添加额外的服务器,这可能比单个机器的高端硬件的总体成本更低。 但是基础架构和部署维护的复杂性增加。


MongDB 通过分片来支持水平拓展



分片集群


一个MongoDB 分片集群有下列组件:

  • shard : 每个分片都包含被分片数据的子集。 每个分片都可以被部署为副本集。
  • mongos:mongos扮演查询路由,提供客户端和应用进程之间的接口和分片集群。
  • 配置服务:配置服务存储集群的元数据和配置信息。在MongoDB3.4之后,配置服务必须已复制集CSRS的方式部署。



下面图片描述了分片集群组件的关系:



MongDB 在集合级别分片数据,在集群中的分片上分布式访问集合数据。



分片key


在集合中分布式文档,MongDB 使用shard key 分区集合。分片键由目标集合中存在与每个文档中的不可变字段组成。


在分片集合时选择分片键。 分片后分片键的选择无法更改。 一个分片集合只能有一个分片键


要对非空集合进行分片,集合必须具有以分片键开头的索引。 对于空集合,如果指定分片键上尚未具有的适当索引,MongoDB将创建索引。


分片键的选择会影响分片群集的性能,效率和可伸缩性。 具有最佳硬件和基础结构的群集可能会因选择分片键而受到瓶颈。 选择分片键及其支持索引也会影响群集可以使用的分片策略。



chunks


MongoDB将分片数据划分为chunk。 每个chunk都具有基于分片键的较低的和独占的较高范围。


有一个负载均衡器在后台运行,在shard之间合并chunk。



分片前的注意事项


如果查询不包括分片键或复合分片键的前缀,则mongos将执行广播操作,查询分片群集中的所有分片。 这些分散/收集查询可能是长时间运行的操作。


被分片和未被分片的集合


数据库可以混合使用分片和非分片集合。 分片集合在集群中的分片上进行分区和分布式。 非分片集合存储在主分片上。 每个数据库都有自己的主分片。
 





连接到被分片的集群


你必须连接到mongos 路由来和分片集群中的任何集合进行交互。这包括被分片和未被分片的机会。客户端永远不应连接到单个分片来行读取或写入操作。


 


连接方式可以通过mongo shell 或者 MongoDB 驱动,和连接到mongod 的方式一样。




分片策略


MongoDB支持两种分片策略,用于在分片群集中分布式数据。



哈希分片


哈希分片涉及计算分片键字段值的哈希。 然后根据分片键值的哈希为每个chunk分配一个范围。


tip:
在使用哈希索引解析查询时,MongoDB会自动计算哈希值。 应用程序不需要计算哈希值。

 




虽然一个分片键的范围可能“close”,但它们的散列值不太可能在同一chunk上。 基于哈希值的数据分布有助于更均匀的数据分布,尤其是在分片键单调变化的数据集中。


但是,哈希分布意味着对分片键的基于范围的查询不太可能以单个分片为目标,从而导致更多群集范围的广播操作


范围分片


范围分片以分片键值分裂数据到范围。 然后根据分片键值为每个chunk分配一个范围。

 

扫描二维码关注公众号,回复: 14176553 查看本文章



一个分片键的范围总是"close"的,更可能驻留在同一个块上。 这允许有针对性的操作,因为mongos可以将操作仅路由到包含所需数据的分片。


远程分片的效率取决于所选的分片键。 考虑不周的分片键可能导致数据分布不均匀,这可能会抵消分片的某些好处,或者可能导致性能瓶颈。

在分片集群中的空间


在分片群集中,您可以根据分片键创建分片数据区域。 您可以将每个区域与群集中的一个或多个分片相关联。 分片可以与任意数量的区域相关联。 在已被平衡群集中,MongoDB通过区覆盖的chunk合并到与区关联的分片。


每个区域涵盖一个或多个分片键值范围。 区域覆盖的每个范围始终包括其下边界并且不包括其上边界。


 



--多个分片可以组成一个区,区里的chunk可以被平衡




在为要覆盖的区域定义新范围时,必须使用分片键中包含的字段。 如果使用复合分片键,则范围必须包含分片键的前缀。




选择分片键时,请仔细考虑将来使用区分片的可能性,因为在分片集合后无法更改分片键。


最常见的是,区服务用于改善跨越多个数据中心的分片群集的数据的位置。




分片中的排序规则
使用带有排序规则的shardCollection命令:{locale:"simple"}选项可以对具有默认排序规则的集合进行分片。 成功分片需要:

  • 集合必须具有一个索引,其前缀是分片键
  • 这个索引必须有排序规则{locale:"simple"}



使用归类创建新集合时,请在分片集合之前确保满足这些条件。




注意:
分片集合上的查询将继续使用为集合配置的默认排序规则。 要使用分片键索引的simple 排序规则,请在查询的排序规则文档中指定{locale:“simple”}。

分片概述 - 知乎

公中号:微程序学堂

猜你喜欢

转载自blog.csdn.net/u013288190/article/details/124854507