概念:数据库分区是一种物理数据库设计技术

目的:主要目的是为了在特定SQL操作中减少数据读写的总量以缩短响应时间

分类:分为水平分区(Horizontal Paritioning)和垂直分区(Vertical Partitioning)

水平分区:是对表的行进行分区,通过这种方式不同分组里面的物理列分隔的数据集得以组  合,从而进行个体分隔(单分区)或集体分隔(1个或多个分区).所有表中定义的列  在米格数据集中都能找到,所以表的特性依然得以保持。

例如:一个包含十年发票记录的表可以被分区为十个不同的分区,每个分区包含的是其 中一年的记录。(一定要通过某个属性来进行分割,这里使用的就是年份)

垂直分区:通过对表的垂直划分来减少目标表的宽度,事某些特定的列被划分到特定的分区, 每个分区都包含了其中的列所对应的行。

例如:一个包含了大text和BLOB列的表,这些text和BLOB列又不经常被访问,这时  候就要把这些不经常使用的text和BLOB划分到另一个分区,在保证他们数据相  关性的同时还能提高访问速度。

分区优点:

  • 相对于单个文件系统或是硬盘,分区可以存储更多的数据
  • 数据管理比较方便,比如要清理或废弃某年的数据,可以直接删除该日期的分区数据即可
  • 精准定位分区查询数据,不需要全表扫描查询,大大提高数据检索效率
  • 可跨多个分区磁盘查询,来提高查询的吞吐量
  • 在涉及聚合函数查询时,可以很容易进行数据的合并

详解:

  • 分区:就是把一张表的数据分成N个区块,在逻辑上看最终只是一张表,但底层是由N个 物               理区块组成的
  • 分表:就是把一张表按一定的规则分解成N个具有独立存储空间的实体表。系统读写时需要               根据定义好的规则得到对应的字段名,然后操作它
  • 分库:一旦分表,一个库中的表会越来越多,当数据量很大时,影响到使用时,就需要进行               分库操作。

单机数据库的问题:

  • 单个表数据量越大,读写缩,插入操作重新建立索引效率越低
  • 单个库数据量太大(一个数据库数据量到1T-2T就是极限)
  • 单个数据库服务器压力过大
  • 读写速度遇到瓶颈(并发量几百)

分区使用情景:

  • 一张表的查询速度已经慢到影响使用的时候
  • sql进过优化
  • 数据量过大
  • 表中的数据是分段的
  • 对数据的操作往往只能涉及一部分数据,而不是所有的数据

分区解决的问题:主要是可以提升查询效率

分区的简单实现方式:MySQL5开始支持分区功能

使用oracle数据库创建表分区,使用的是DBeaver Enterprise工具编写sql代码,具体连接方式在此就不做阐述了,大家百度下,接下来创建表分区:

--创建分区表 此表尚未创建

--创建分区表 此表尚未创建
create table student(s_id number(3) primary key,s_name varchar2(10),s_sex char(2),s_age number(3)
)
partition by range(s_age)(partition p1 values less than(20),partition p2 values less than(40),partition p3 values less than(maxvalue) --分区列中的最大值
)
--向student表中添加数据
insert into student values (111,'张三','男',18);
insert into student values (222,'赵四','男',16);
insert into student values (333,'王五','男',15)
insert into student values (444,'李一','男',20)
insert into student values (555,'李七','男',32)
insert into student values (666,'徐八','男',40)
insert into student values (777,'佟九','男',49)
--查询表
select * from student;
--查询分区数据
select * from student partition(p1);
select * from student partition(p2);
select * from student partition(p3);

将已存在的表修改为分区表:

--创建sales表
CREATE TABLE sales(s_id NUMBER NOT NULL,product_id varchar2(5),sales_date DATE,sales_cost NUMBER(10),areacode varchar2(5)
);
--向表中批量添加数据  注意最后的select * from dual不要漏掉
INSERT ALL INTO sales(s_id,product_id,sales_date,sales_cost,areacode) VALUES(111,'12',TO_DATE('2011-01-01','yyyy-mm-dd'),300,'china')
into sales(s_id,product_id,sales_date,sales_cost,areacode) VALUES(112,'13',TO_DATE('2012-03-01','yyyy-mm-dd'),320,'china' )
into sales(s_id,product_id,sales_date,sales_cost,areacode) VALUES(113,'14',TO_DATE('2012-05-01','yyyy-mm-dd'),620,'china' )
into sales(s_id,product_id,sales_date,sales_cost,areacode) VALUES(114,'15',TO_DATE('2013-06-01','yyyy-mm-dd'),340,'china' )
into sales(s_id,product_id,sales_date,sales_cost,areacode) VALUES(115,'16',TO_DATE('2014-08-01','yyyy-mm-dd'),720,'china' )
into sales(s_id,product_id,sales_date,sales_cost,areacode) VALUES(116,'13',TO_DATE('2016-01-01','yyyy-mm-dd'),320,'china' )
into sales(s_id,product_id,sales_date,sales_cost,areacode) VALUES(117,'18',TO_DATE('2018-03-01','yyyy-mm-dd'),220,'china' )
SELECT * FROM dual
--复制一份该表并创建表分区
CREATE TABLE sales_range
PARTITION BY  RANGE(sales_date)(PARTITION part1 VALUES less than (TO_DATE('2011-01-01','yyyy-mm-dd')),PARTITION part2 VALUES less than (TO_DATE('2012-01-01','yyyy-mm-dd')),PARTITION part3 VALUES less than (TO_DATE('2013-01-01','yyyy-mm-dd')),PARTITION part4 VALUES less than (MAXVALUE)
)
AS SELECT * FROM sales;
--查询分区数据
SELECT * FROM sales_range PARTITION(part4);

分表场景:

  • 一张表的查询速度已经影响到使用的时候
  • SQL经过优化
  • 数据量过大
  • 当频繁插入或者联合查询时,速度变慢

分表解决的问题:

分表后,单表的并发能力提高了,磁盘I/O性能也提高了,写操作效率提高了

  • 查询一次的时间短了
  • 数据分布在不同的文件,磁盘I/O性能提高
  • 读写锁影响的数据量变小
  • 插入数据库需要重新建立索引的数据减少

分表的实现方式:(较为复杂)

需要业务系统配合迁移升级,工作量大

分区和分表的区别和联系:

  • 分区和分表的目的都是减少数据库的负担,提高表的增删改查效率
  • 分区只是一张表中的数据的存储位置发生改变,分表是将一张表分成多张表
  • 但访问量大,且表数据较大时,两种方式可以相互配合使用
  • 当访问量不大,但表数据较多时,可以只进行分区。

常见分区分表的对着策略:

  • Range(范围)
  • Hash(哈希)
  • 按照时间拆分
  • Hash之后按照分表个数取模
  • 在认证库中保存数据库配置,就是建立一个DB,这个DB单独保存user_id到DB的映射关系

数据存储的进化历史:

  • 单库单表
  • 单库多表
  • 多库多表

优先考虑分区,当分区不能满足要求时,开始考虑分表,合理的分表对效率的提升会优于分区

京东商品评价存储设计。背景:

  • 商品的评论数量:数十亿条
  • 每天的服务调用:数十亿次
  • 每年成倍增长

整体的数据的存储:基础数据存储,文本存储

基础数据存储:

MySQL:只存储非文本的基础信息,包括:评论状态、用户、时间等基础数据。以及图片、标签、点赞等附加信息。数据组织形式(不同的数据又可选择不同的库表拆分方案):

  • 评论基础数据按用户ID进行拆库并拆表
  • 图片及标签处于同一数据库下,根据商品编号分别进行拆表
  • 其他的扩展信息数据,因数据量不大,访问量不高,处理于同一库下且不做分表即可

文本存储:

文本存储(评论的内容)使用了mongodb 、 hbase

  • 选择nosql而非MySQL
  • 减轻了MySQL存储压力,释放MySQL,庞大的存储也有了可靠的保障
  • nosql的高性能读写大大提升了系统的吞吐量并降低了延迟

数据分片:

在分布式存储系统中,数据需要分散存储在多台设备上,数据分片(Sharding)就是用来确定数据在多台存储设备上分布的技术。数据分片要达到三个目的:

  1. 分布均匀,即每台设备上的数据量要尽可能相近。
  2. 负载均衡,即每台设备上的请求量要尽可能相近。
  3. 扩缩容时产生的数据迁移尽可能少.

路漫漫其修远兮,吾将上下而求索,希望此篇文章对大家有所帮助..........

数据库分区概念及简单运用相关推荐

  1. 天翼云从业认证(1.3)了解数据库的概念、SQL、关系型数据库、大数据和 NoSQL 数据库

    数据库的概念 SQL 简单举例 create \ insert \ update \ delete\select WHERE\BETWEEN\IS NULL\LIKE avg\count\max gr ...

  2. mysql 不同分区 同时insert_一文看懂mysql数据库分区表概念、类型、适用场景、优缺点及原理...

    概述 最近对项目上部分表按时间做了分区,所以顺便整理下mysql分区表的一些内容,仅供参考. 一.分区表概念 分区是将一个表的数据按照某种方式,比如按照时间上的月份,分成多个较小的,更容易管理的部分, ...

  3. 早在公元前五百年,孙子就参透了数据库分区的真谛

    来自:DBAplus社群 作者介绍 宇文湛泉,现任金融行业核心业务系统DBA,主要涉及Oracle.DB2.Cassandra等数据库开发工作. 数据库分区,我觉得是一个称得上"伟大&quo ...

  4. SQL全方位攻略:之数据库历史、数据库基本概念和相关术语,以及常见的数据库类型介绍

    文章目录 1.数据库介绍 1.1 数据库历史 1.2 数据库基本概念和术语 1.2.1. 数据库 1.2.2. 数据库管理系统(DBMS) 1.2.3. 应用程序 1.2.4. 模式(Schema) ...

  5. 数据库分区、分表、分库、分片

    一.分区的概念 数据分区是一种物理数据库的设计技术,它的目的是为了在特定的SQL操作中减少数据读写的总量以缩减响应时间. 分区并不是生成新的数据表,而是将表的数据均衡分摊到不同的硬盘,系统或是不同服务 ...

  6. 数据库基本概念:OLTP/OLAP/HTAP、RPO/RTO、MPP

    数据库基本概念:OLTP/OLAP/HTAP.RPO/RTO.MPP OLTP OLAP HTAP 行存储 列存储 MPP RTO RPO OLTP OLTP=Online Transaction P ...

  7. mysql的分区技术作用_理解MySQL数据库分区管理的技术细节

    在MySQL数据库中,表的不同部分在不同的位置被存储为单独的表.分区主要就是用来解决表在不同的位置存储的问题.在其他数据库中,也会存在这种情况.他们将这种类型的数据表称之为分区表.分区的管理,对于My ...

  8. Swap交换分区概念

    Swap交换分区概念 什么是Linux swap space呢?我们先来看看下面两段关于Linux swap space的英文介绍资料: Linux divides its physical RAM ...

  9. lucene和elasticsearch的前世今生、elasticsearch的核心概念、elasticsearch核心概念 vs. 数据库核心概念(来自学习资料)

    1.Lucene和elasticsearch的前世今生 lucene,最先进.功能最强大的搜索库,直接基于lucene开发,非常复杂,api复杂(实现一些简单的功能,写大量的java代码),需要深入理 ...

最新文章

  1. 知识图谱要看的书 了解的人 公众的号
  2. 机器学习的5个常见痛点及解决方法
  3. Android 三角形控件
  4. Windows打印体系结构之打印驱动框架
  5. client-go删除job同时删除job关联的pod
  6. Java中空值处理的感受
  7. 豆瓣评分 9.1,揭秘乔布斯如何成为最伟大的产品经理?
  8. 8 -- 深入使用Spring -- 4...3 AOP的基本概念
  9. Java接口自动化之TestNG单元测试框架(一)
  10. cout 数组_C++用指针访问数组元素(学习笔记:第6章 08)
  11. [开源第一波]SmartScript
  12. comsol固体传热_参与介质中辐射传热的 4 种计算方法
  13. ***的在实际环境中的应用和配置
  14. linux麒麟安装磁盘分区,一种中标麒麟系统根分区扩容的实现方法技术方案
  15. 如何加密PDF文件?多种实用方法介绍
  16. 基于MATLAB的人脸识别
  17. Swing-图表(扇形图的绘制)
  18. 干货:1分钟了解巨量引擎准入行业和资质规范
  19. Docker 搭建 Nextcloud
  20. laravel admin里百度编辑器自定义路径和文件名

热门文章

  1. mysql 中创建自增的序列(Sequence)
  2. Windows系统在CMD命令行中用del命令删除文件
  3. ZOJ - 1110 Dick and Jane
  4. AlignedReID 源码解析
  5. 大学生开学需要准备哪些数码产品、五款大学生必买的电子产品
  6. Android腾讯开放平台应用认领
  7. Wallis formula(华里士/沃利斯公式)
  8. vue中将base64的pdf文件流转换成pdf并预览(二)——base64转PDF工具的使用
  9. 数据库并发问题和事务隔离界别
  10. 速算24 c语言,C语言源程序代码-速算24