第六天 分片技术

  在mongodb里面存在另一种集群,就是分片技术,跟mysql的表分区类似,我们知道当数据量达到T级别的时候,我们的磁盘,内存就吃不消了,针对这样的场景我们该如何应对。

一、分片

  mongodb采用将集合进行拆分,然后将拆分的数据均摊到几个片上的一种解决方案。

  

  下面我对这张图解释一下:

  人脸:代表客户端,客户端肯定说,你数据库分片不分片跟我没关系,我叫你干啥就干啥,没什么好商量的。

  mongos首先我们要了解“片键”的概念,也就是说拆分集合的依据是什么?按照什么键值进行拆分集合....

  好了,mongos就是一个路由服务器,它会根据管理员设置的“片键”将数据分摊到自己管理的mongod集群,数据和片的对应关系以及相应的配置信息保存在"config服务器"上。

  Mongod:一个普通的数据库实例,如果不分片的话,我们会直接连上mongod。

二、实战

  首先我们准备4个mongodb程序,我这里是均摊在C,D,E,F盘上,当然你也可以做多个文件夹的形式。

  1、开启config服务器

    先前也说了,mongos要把mongod之间的配置放到config服务器里面,理所当然首先开启它,我这里就建立2222端口。

    

  2、开启mongos服务器

    这里要注意的是我们开启的是mongos,不是mongod,同时指定下config服务器,这里我就开启D盘上的mongodb,端口3333。

    

  3、启动mongod服务器

    对分片来说,也就是要添加片了,这里开启E,F盘的mongodb,端口为:4444,5555。

    

  4、服务配置

    哈哈,是不是很兴奋,还差最后一点配置我们就可以大功告成。

    (1)先前图中也可以看到,我们client直接跟mongos打交道,也就说明我们要连接mongos服务器,然后将4444,5555的mongod交给mongos,添加分片也就是addshard()。

      

      这里要注意的是,在addshard中,我们也可以添加副本集,这样能达到更高的稳定性。

    (2)片已经集群了,但是mongos不知道该如何切分数据,也就是我们先前所说的片键,在mongodb中设置片键要做两步

      ①:开启数据库分片功能,命令很简单 enablesharding(),这里我就开启test数据库。

      ②:指定集合中分片的片键,这里我就指定为person.name字段。

        

   5、查看效果

      好了,至此我们的分片操作全部结束,接下来我们通过mongos向mongodb插入10w记录,然后通过printShardingStatus命令查看mongodb的数据分片情况。

     

  这里主要看三点信息:

  ① shards     我们清楚的看到已经别分为两个片了,shard0000和shard0001。

  ② databases: 这里有个partitioned字段表示是否分区,这里清楚的看到test已经分区。

  ③ chunks:    这个很有意思,我们发现集合被砍成四段:

  无穷小 —— jack0,jack0 ——jack234813,jack234813——jack9999,jack9999——无穷大。

  分区情况为:3:1,从后面的 on shardXXXX也能看得出。

时间: 2024-10-08 23:40:08

第六天 分片技术的相关文章

8天学通MongoDB——第六天 分片技术

在mongodb里面存在另一种集群,就是分片技术,跟sql server的表分区类似,我们知道当数据量达到T级别的时候,我们的磁盘,内存 就吃不消了,针对这样的场景我们该如何应对. 一:分片 mongodb采用将集合进行拆分,然后将拆分的数据均摊到几个片上的一种解决方案. 下面我对这张图解释一下: 人脸:       代表客户端,客户端肯定说,你数据库分片不分片跟我没关系,我叫你干啥就干啥,没什么好商量的. mongos: 首先我们要了解”片键“的概念,也就是说拆分集合的依据是什么?按照什么键值

redis预分片技术及实现

通常情况下,我们会建立多个redis实例来缓解单个redis实例的压力.但是,随着缓存数量的增加,对redis进行扩容是一件非做不可的事情.对redis进行扩容可以有多种办法,比如增加每个redis实例的最大内存.这只是解决办法之一,而且缺乏灵活性和可扩展性.在redis官网上,提到了预分片技术.本文将对预分片技术进行讲解,同时讲解jedis对分片是如何支持的. 一.redis预分片技术 在单个server上搭建多个redis实例.当需要扩展时,可以利用复制机制进行扩展,可参照如下步骤: 1)在

MySQL数据库分片技术调研

将这段时间了解的MySQL分片技术和主从复制只是整理清楚画了思维导图记录一下,希望能给需要的人一些帮助 P.S.:个人整理,可能会有错误之处,还望指出~ 要解决的问题 1.海量数据的操作超出单表.单库的最大限制 2.访问压力超出数据库系统限制,性能下降 3.数据库复制.容灾等问题 解决方案 一.采用数据分表分库提高数据库的性能限制 1.可选Sharding策略 2.Sharding实现的层面 可以为: (1)数据访问层(DAO) (2)ORM框架层 (3)JDBC API层 (4)应用服务器和数

Mongodb学习总结-6(分片技术)

在mongodb里面存在另一种集群,就是分片技术,跟sql server的表分区类似,我们知道当数据量达到T级别的时候,我们的磁盘,内存 就吃不消了,针对这样的场景我们该如何应对. 一:分片 mongodb采用将集合进行拆分,然后将拆分的数据均摊到几个片上的一种解决方案. 下面我对这张图解释一下: 人脸:       代表客户端,客户端肯定说,你数据库分片不分片跟我没关系,我叫你干啥就干啥,没什么好商量的. mongos: 首先我们要了解”片键“的概念,也就是说拆分集合的依据是什么?按照什么键值

mongoDB分片技术

MongoDB 分片 分片 在Mongodb里面存在另一种集群,就是分片技术,可以满足MongoDB数据量大量增长的需求. 当MongoDB存储海量的数据时,一台机器可能不足以存储数据,也可能不足以提供可接受的读写吞吐量.这时,我们就可以通过在多台机器上分割数据,使得数据库系统能存储和处理更多的数据. 为什么使用分片 复制所有的写入操作到主节点 延迟的敏感数据会在主节点查询 单个副本集限制在12个节点 当请求量巨大时会出现内存不足. 本地磁盘不足 垂直扩展价格昂贵 MongoDB分片 下图展示了

redis分片技术

需求: 如果将全部数据都保存到一台redis中,那么如果该服务器损坏,则影响全部的服务: 使用单台redis内存设定一般不要超过1G,但是有些业务数据量很大,如果不修改内存,则数据无法存储: 方案: 采用redis分片技术: 优点: 1.使用redis分片可以实现内存数据的动态扩容: 2.使用分片,每台redis节点中尽可能保存1/n的数据量,防止数据的丢失: 3.对于用户而言,整个redis的分片就是一个服务:n台服务器作为一个整体的服务器共同为用户服务: 1. 分片搭建: 1.1复制配置文件

Seele元一首席架构师刘文思:分片技术是把双刃剑,单纯看TPS或分片数量毫无意义

导语:近日, seele团队成立了"Seele最前线"媒体平台,希望可以通过此平台向全球社区伙伴实时同步团队动态与工作进展.正值Seele元一技术团队对测试网进行了新一轮测试,"Seele最前线"第一期内容便邀请到Seele元一首席架构师刘文思,并针对分片技术同大家进行交流. 事实上,区块链的扩展性问题一直是大多数公链发展过程中难以避开的拦路石,随着数字货币的集体性下跌,区块链技术正逐渐回归理性,公链的吞吐量问题再次成为焦点.比特币网络平均每秒只可以处理7-10笔交

MongoDB集群解决方案-分片技术

MongoDB,NoSQL技术的实现,基于分布式文件存储的数据库,由C++语言编写.主要是解决海量数据的访问效率问题,为web应用提供可扩展的高性能数据库存储解决方案 MongoDB集群的实现方式: 1.Replica Set:也叫作副本集,简单来说就是集群中的服务器包含了多分数据,保证主节点挂掉了.备节点能够继续的提供服务,但是提供的前提就是数据必须要和主节点的一致,如下图: MongoDB(M)表示主节点,MongoDB(S)表示从节点,MongoDB(A)表示仲裁节点: M节点存储数据并提

【杨镇】【中译修订版】以太坊的分片技术官方介绍

杨镇,资深软件架构师,资深开发工程师.以太坊技术爱好者与布道者. 是Solidity官方文档中译项目的重要贡献者,以太坊Homestead官方文档中文版译者,并对以太坊黄皮书中文版.Thunder共识白皮书中文版进行了独立校订.目前致力于以太坊技术推广及智能合约开发.安全审计方向. 原文链接:    https://github.com/ethereum/sharding/blob/develop/docs/doc.md 作者: Vitalik 序言 本文的目的是为那些希望理解分片建议详情,乃至