【MongoDB】Sharding分片概念及原理
面对海量的数据,如何提升数据读写效率?了解过DB的应该都知道数据库的分区,分区是主要提升数据查询的效率。面对海量数据的IO能力限制以及扩展性,Sharding是一个利器,我们不用关心具体的实现,从而实现性能的提升。
Sharding不是一门技术,而是一个理念,解决数据的水平扩展,突破单节点的IO限制。很多成熟的NoSQL以及NewSQL就自带了sharding实现,使用者直接指定需要分片的字段,集群就可以自行分片了。
sharding是share nothing的简写,在不同的片区,数据互不干扰。和传统的分区不同,数据库分区是物理数据库实现的技术,目的是为了在操作数据库时减少SQL设计的读写范围,提升读数据的时间。sharding是面对分布式的存储,将查询进行并行处理。
sharding是负责数据的一个子集中一台或多台服务器,如果有多台服务器,每一台服务器都是一个数据的副本,通常我们在replica set中可以设定副本数。一般来说,在定义了分片key字段后,sharding有三种方式:
按号段
hash取模
用户自定义
很多nosql和newSQL已经实现了sharding技术,下面以MongoDB和Mysql cluster为例来详细介绍。
MongoDB
在指定了分片字段(shard key)后,mongoDB集群会将数据自行进行分区,通过数据量进行分片。同时他会对每一分片进行区间划分,每一区间又各自存储不同范围的数据。这么做目的是为了进行数据的合理转移,减少因为大数据量的转移带来的网络开销,影响使用。通常块定义大小是200M,定义过大,会导致移动数据大带来的网络开销,过小,又会带来管理开销。
mongoDB在移动数据使之达到平衡的工作,由一个平衡器进程来做,自动化完成,你无需关心其中细节。平衡器的目标不仅是平衡,还需要最小化迁移量。
用户不会直接的访问mongo分片,二是通过mongoDB的终端mongos来访问,其会转移所有的请求到对应的分片,而所有的配置,都保存在mongod配置服务器上,mongod是轻量的进程,通常可以运行在任何的mongo集群服务器上。
使用mongo集群需要注意对数据的统计,如果一个分片移动正在进行,那么在两个分片都会保存该数据,直到移动完成,才会在原有分片上将数据删除。所以如果分片不合理造成频繁的移动,那么极有可能是统计出很多多余的数据。
另外,如果需要对数据超过一个字段进行唯一性验证,通常我们设置了一个字段索引,并按照该字段索引进行分片,这时针对另外一个需要唯一性的字段,写入时必须要检测是否已经存在,假设有两个应用程序进程,同时检测,这时会得到都没有的结果,然后同时写入,导致重复字段。解决的方式是必须在写前对所有集群加锁,但会严重影响集群的性能。
【MongoDB】Sharding分片概念及原理相关推荐
- mongodb分片概念和原理-实战分片集群
一.分片 分片是一种跨多台机器分发数据的方法.MongoDB使用分片来支持具有非常大的数据集和高吞吐量操作的部署. 问题: 具有大型数据集或高吞吐量应用程序的数据库系统可能会挑战单个服务器的容量.例如 ...
- MongoDB Sharding分片配置
Ps:mongod是mongodb实例,mongos被默认为为mongodb sharding的路由实例. 本文使用的mongodb版本为3.2.9,因此参考网址为:https://docs.mong ...
- MongoDB Sharding 请勿复用已删除的 namespace
SERVER-17397: Dropping a Database or Collection in a Sharded Cluster may not fully succeed 是 MongoDB ...
- MongoDB实战(11)Sharding 分片(上)
这是一种将海量的数据水平扩展的数据库集群系统数据分表存储在sharding 的各个节点 上使用者通过简单的配置就可以很方便地构建一个分布式MongoDB 集群. MongoDB 的数据分块称为 chu ...
- Mongodb sharding转换一个副本集为分片集群
2019独角兽企业重金招聘Python工程师标准>>> 1. 部署一个测试副本集 创建第一个副本集实例,名称为firstset: 1.1 创建副本集并且插入数据如下:/data/ex ...
- MongoDB sharding迁移那些事(一)
如果不了解 MongoDB Sharded Cluster 原理,请先阅读 MongoDB Sharded cluster架构原理 关于MongoDB Sharding,你应该知道的 关于 shard ...
- Mongodb存储特性与内部原理
前言 本文重点叙述下mongodb存储特性和内部原理, 下一篇文章咱们一起来搭建下Replica Sets+Sharded Cluster的集群 存储引擎 wiredTiger引擎 1.3.0新增引擎 ...
- MongoDB的基本概念与操作
本文来说下MongoDB的基本概念与操作 文章目录 什么是MongoDB 主要特点 基本概念 数据库操作 集合操作 文档操作 什么是MongoDB MongoDB 是由C++语言编写的,是一个基于分布 ...
- gizzard mysql_【MongoDB】在window系统下搭建MongoDB的分片系统(一)
这篇主要讲述分片集群的主要原理 坦白说,刚看到这个分片系统(Sharding)有点蒙,感觉有点太高大上了.看美国作家Kyle Banker<Mongodb in action>没有明白.又 ...
最新文章
- python编程规范
- Kettle使用_8 存储过程结合获取系统信息
- javascript 正则表达式提取数字使用
- 小白开学Asp.Net Core《四》 —— 使用AspectCore-Framework
- Android API中被忽略的几个函数接口
- word中如何将所有字母一次修改成新罗马字体
- 艰困之道中学到的经验教训
- NLP简报(Issue#8)
- 与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误
- 基于Android的图书管理系统
- [camera][v4l2][第五话]: UVC协议学习
- 来几个有趣的Linux指令 (转自Chinaitlab)
- Access2016学习1
- HDU-5857-Median
- AI资源对接需求汇总:第3期
- 暑期实习-京东广告架构组三面面经
- html怎么改变图片整体大小,css怎么改变图片大小?
- Incremental Learning of Object Detectors without Catastrophic Forgetting详解
- Classifier-Free Diffusion Guidance【论文精读加代码实战】
- 调用批处理bat文件
热门文章
- css背景上能添加文字,CSS3怎么为文字添加背景?
- android 根据版本,Android – 根据构建类型更改flavor版本名称
- linux usb 触摸屏驱动,请教大家一个linux下的usb触摸屏驱动的问题
- HTTPS 原理详解
- 如何使用html和css,如何使用html和css制作这个div?
- java直接对list使用sql语句_Java和SQL语句阶段考试错题集
- rpm安装的mysql如何数据迁移_linux下mysql数据库的rpm安装步骤及常见问题的解决
- python自动化工具开发_初识TPOT:一个基于Python的自动化机器学习开发工具
- 【linux】kill命令模板
- java匿名内部类的使用场景_java匿名内部类的使用场景