首页 > 编程知识 正文

mongodb工作原理,mongodb分片集群扩容

时间:2023-05-03 05:12:54 阅读:152341 作者:4555

文章目录0 mongo查询简图----configservers----shard(1 (什么是1平铺? 为什么要用瓷砖? 2片分为几类? 3片密钥限制和逻辑4选择片将对查询、写入等产生什么影响参考链接:

0 mongo查询示意图(mongosconfig servers---shard ) ) )。

在实现分片集群时,MongoDB引入Config Server保存集群元数据,引入mongos作为APP应用访问的入口,mongos从Config Server读取路由信息,并回退请求

角色说明

答:数据切片(Shards )用于存储数据并确保数据的高可用性和一致性。 它可以是单独的mongod实例,也可以是复制集。 在生产环境中,Shard通常是Replica Set,用于防止片出现单点故障。 所有Shard都有一个主Shard,其中包含未分割的数据集合。 包含群集元数据(Config servers ),并包含每个Shard的路由规则。 元数据解释:元数据是关于数据的组织、数据域及其关系的信息。简而言之,元数据是数据的数据查询路由器Mongos是共享群集的访问入口。 它本身并不会使数据永久化。 (所有Sharded cluster元数据都存储在Config Server中,但用户数据分散存储在每个shard中。 ) Mongos启动后,将从配置服务器加载元数据,并启动服务,以便将用户的请求正确地路由到相应的Shard Sharding群集

1什么是切片? 为什么要用瓷砖? 分片是指将mongo单个表中的数据分成多个chunk。 从而横向提高mongo的读写能力。 为什么分成多个chunk会提高读写能力呢? 当多个chunk分布在多台机器上,可以利用多台机器的CPU和磁盘IO分配给多个chunk时,由于瓷砖键的存在,当用瓷砖键进行查询时,直接定位在某个chunk上,在其中一个chunk中进行询问明显会变快。 这样的查询可以理解为MySQL中的人工表(mongo更自动化)。 例如,在日志表中,按日期创建表。 对于诚实的薯片查询,连接表名并将其定位在某个表中。 这样就不需要扫描所有表中的数据了。

2片分为几类? 散列平铺密钥数据分配原理:继续向一个chunk添加数据,达到上限后开始分割的利弊。 散列密钥可以分布多个chunk,从而大大提高写入性能的缺点。 不便于范围查询range分片密钥数据分配的原理:散列分片密钥的值,然后所得的值按range分布在每个chunk优势和劣势中。 1、方便范围查询2、如果分片密钥不单调增加,可以提高写入性能的劣势。 如果平铺密钥单调增加,则无法提高写入性能

3限制切片密钥和限制逻辑切片密钥选择切片密钥是不变的。 平铺密钥需要索引。 瓷砖大小限制512字节。 分片密钥用于路由查询。 MongoDB不接受在已经创建了collection级别平铺的collection中插入没有平铺键的文档。 此外,它也不支持插入空值。 瓷砖键的选择逻辑是所有瓷砖的读写都是均匀的。 均匀访问数据,而不是随机访问; 所有新数据都将在内存中创建,从而最大限度地减少了从磁盘访问新数据的需要。 数据块的数据移动会将数据从磁盘加载到内存中,从而防止热数据从内存中擦除。 结合场分幅可能是理想的分幅方案。 分片表达式(范围热) http://www.Sina.com/http://www.Sina.com/)必须是大粒度的本地字段。 例如MONTH月升序字段。分片键公式:{coarseLocality:1,search:1}:是经常用于搜索的字段。 4切片对查询、写入等有何影响

的所有请求都由mongos路由、分发和合并。 这些动作对客户端驱动程序是透明的,用户连接到mongos的方式与连接到mongod的方式相同。

Mongos根据请求的类型和Shard key将请求路由到对应的shard,因此根据操作请求的不同限制也不同。

查询请求

如果查询请求不包含shard key,则必须将查询分发到所有shard,然后合并查询结果并返回给客户端

在查询请求中包含shard key的情况下,根据shard key直接计算需要查询的chunk,向对应的shard发送查询请求插入请求

写入必须包含共享密钥。 mongos根据shard key计算出文档应该保存在哪个chunk中,并将写入请求发送到chunk所在的shard。 更新/删除请求

更新/删除请求的查询条件必须包括shard key或_id。 如果包含shard key,则直接路由到指定的chunk。 如果只包含_id,则必须将请求发送到所有shard。 其他命令请求

除了添加/删除检查之外,处理命令请求的方式各不相同,并且有各自的处理逻辑。 例如,listDatabases命令将listDatabases请求转发到每个Shard和Config Server并合并结果

参考链接: https://www.cn blogs.com/little ATP/p/8562931.html

3359 www.cn blogs.com/zping/p/11203545.html

3359 www.cn blogs.com/clsn/p/8214345.html # auto-id-29

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。