阿里云虚拟主机多网站电子商务平台加盟
阿里云虚拟主机多网站,电子商务平台加盟,高端网站建设一般多少钱,哪个网站有上门做指甲MongoDB分片技术
介绍 分片#xff08;sharding#xff09;是MongoDB用来将大型集合分割到不同服务器上采用的方法。分片这种说法起源于关系型数据库。但是实际上非关系型数据库在分片方面相比于传统的关系型数据库更有优势。 与MySQL分库方案对比#xff0c;MongoDB…MongoDB分片技术
介绍 分片sharding是MongoDB用来将大型集合分割到不同服务器上采用的方法。分片这种说法起源于关系型数据库。但是实际上非关系型数据库在分片方面相比于传统的关系型数据库更有优势。 与MySQL分库方案对比MongoDB的最大区别就在于用户不需要去关心一条数据到底要存储到哪一个机器上MongoDB会自动帮你完成所有事情例如自动维护数据在不同服务器之间的均衡。MySQL还需要用户指定分库算法比如Hash映射 目的 单机的存储一定是有上限的不论是什么数据库。并且如果将所有的数据都存储在一台存储服务器上在并发量比较大的情况下这台存储服务器就很容易挂掉。所以使用分片的目的就是为了将数据尽可能的平摊在多台存储服务器上减少单台服务器的存储和请求压力 设计思想 分片为应对高吞吐和大数据量的存储提供了方法。 优势
对集群进行抽象让集群不可见 MongoDB自带了一个叫mongos的专有路由进程。mongos就是掌握统一入口的路由器。会自动将客户端发送来的请求准确无误的路由到集群中的一个或者多个服务器上同时把接受到的响应拼装起来发回到客户端。 保证集群总是可读写 MongoDB通过多种途径来确保集群的高性能和高可用。将MongoDB的分片和复制功能结合使用在确保数据分片到多台服务器的同时对分片数据使用复制功能进行冗余备份达到可靠性 易于拓展 当集群需要更多的资源时可以很容易做到资源的拓展 分片集群架构特点
组件说明Config Server存储集群所有节点、分片数据路由信息。默认需要配置3个Config Server节点Mongos提供对外应用访问所有操作均通过mongos执行。一般有多个mongos节点。Mongod存储应用数据记录。一般有多个Mongod节点达到数据分片目的。
集群架构图 mongos 数据路由和客户端打交道的模块。mongos本身不存储数据只负责去Config Servers查找当前请求所对应处理的shard是谁 config server 所有shard节点的信息、存取数据的方式分片的功能的一些配置信息。可以理解为真实数据的元数据 shard 真正的数据存储位置以chunk为单位存数据 什么是chunk 在一个shard server内部MongoDB还是会把数据分为chunkk每一个chunk代表shard server内部的一部分数据chunk的产生会有以下两种用途 Splitting当一个chunk过大时也就是超过chunk size默认是64M时MongoDB后台进程会把这个chunk切分成更小的chunk从而避免chunk过大的情况 Balancing在MongoDB中balance是一个后台进程。负载chunk的迁移而从均衡各个shard server的负载 分片集群节点的数据分布
使用chunk来存储数据集群搭建完成后会默认创建一个chunk默认64M存储需求超过64M时chunk会进行分裂如果单位时间存储需求很大设置更大的chunkchunk会被自动均衡迁移
如何选择chunk size 小的chunk size 优点数据迁移更快数据分布更均衡。 缺点数据分裂频繁,一次数据请求可能涉及到多个节点对资源消耗较大 大的chunk size 优点数据分裂少 缺点数据移动集中消耗IO资源。通常100-200M chunk分裂以及迁移 随着数据的增长其中数据大小超过了配置的chunk size默认是64M则这个chunk会自动分裂为两个大小相等的chunk 这个时候各个shard上的chunk数量就会不平衡。这时候mongos中的一个组件balancer就会自动平衡。把chunk从chunk数量最多的shard节点挪动到数量最少的节点。 注意⚠️chunk只会分裂不会合并即使后面将chunk size改大了也不会合并
shard key 分片键 mongoDB中的数据的分片是以集合为基本单位的集合中的数据通过片键Shard key被分成多部分。其实片键就是在集合中选一个键用该键的值作为数据拆分的依据。 所以一个好的片键对分片至关重要。片键必须是一个索引其实就是作用在一个字段上。 对集合进行分片时你需要选择一个片键片键是每条记录都必须包含的且建立了索引的单个字段或复合字段MongoDB按照片键将数据划分到不同的数据块中并将数据块均衡地分布到所有分片中 分片键策略 一个自增的片键对写入和数据均匀分布不是很友好因为自增的片键总会在一个分片上写入后续达到某个阈值可能会写到别的分片。但是按照片键查询会非常高效。 随机片键对数据的均匀分布效果很好。注意尽量避免在多个分片上进行查询。在所有分片上查询mongos会对结果进行归并排序。 MongoDB使用基于范围的分片方式 或者 基于 哈希的分片方式。 注意事项 分片键是不可变的。分片键必须有索引分片键大小限制512bytes。分片键用于路由查询键的文档不支持控制插入
基于范围的分片方式 Sharded Cluster支持将单个集合的数据分散存储到多个shard上用户可以指定根据集合内文档的某个字段即shard key来进行范围分片range sharding 基于范围的分片的好处在于数据存储“相近”的数据会被放到同一个chunk中如果使用范围查询例如基于创建时间的范围查询更加友好 基于哈希的分片方式 分片过程中利用哈希索引作为分片的单个键且哈希分片的片键只能使用一个字段而基于哈希片键最大的好处就是保证数据在各个节点分布基本均匀。 对于基于哈希的分片MongoDB计算一个字段的哈希值并用这个哈希值来创建数据块。在使用基于哈希分片的系统中“相近”片键的文档很可能不会存储在用一个数据块中因此数据的分离性更好一些。 Hash分片与范围分片互补能将文档随机的分散到各个chunk充分的拓展写能力弥补了范围分片的不足但是不能高效的服务范围查询所有的范围查询要分发到后端所有的shard才能找出满足条件的文档 总结
MongoDB的分片技术 目的 解决单机存储容量有限和处理大量数据时的性能瓶颈。 将数据分布在多台服务器上减轻单台服务器的压力 分片集群架构特点 包括 Config Server、Mongos 和 Mongod 组件。分片键用于数据分布和路由查询。 分片键策略 片键必须是一个索引并且在所有文档中都存在。分片键选择要考虑查询效率和数据分布均匀性。 基于范围和哈希的分片方式 基于范围的分片适用于范围查询。基于哈希的分片能够将数据均匀地分布在各个节点上。 分片集群的数据分布 数据被分割成多个 chunk并且根据分片键的值存储在不同的分片上。使用 balancer 进程来保持各个分片的数据均衡分布。
下一篇文章MongoDB分片集群的搭建
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/diannao/89529.shtml
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!