随着项目的发展,数据库的单表数据也越来越多,相关操作也就越来越慢,这个时候我们要怎么才能提高我们的相关操作效率呢?很多人都听说过分库分表,但是还有一个分区的方式可能被忽略了,在数据量还未达到千万级别的时候,我们也许还能够使用分区的方式,让一个表的数据分布在不同的文件上面,当然我们要清楚我们的表数据都是按照文件的方式存放在磁盘上面的,分区和分表是不同的意思,分区是指将一个表的数据按照条件分布到不同的文件上面,未分区前都是存放在一个文件上面的,但是它还是指向的同一张表,只是把数据分散到了不同文件而已,但是分表却是将数据分散到了不同的表,结构虽然相同,但是表的名字发生了变化。分区有助于我们降低每次操作的数据,从而提高性能。

遇到这种大数据量的问题,我们可以通过以下思路进行解决:

1.分流(原则就是:尽量使每次操作的数据的基数减少 ):

1.1.用和不用、常用和不常用分开。

1.2.对数据库存放的数据:分区、分库、分表 。

1.3.对文件存放的数据:拆文件。

1.4.考虑分批处理。

2.缓存技术:读多写少用缓存。

3.数据库优化:合理设计数据库结构、合理构建索引、数据库集群 。

4.处理优化:优化Sql、考虑使用临时表、中间表。

5.合理使用NoSql:Mongodb、Redis、HBase等 。

6.分布式大数据处理方案 :Hadoop、Spark、Storm等。

这里我们主要需要了解的是表如何进行分区,分区有什么优缺点以及分区又有哪些注意事项。这里我们是以mysql进行举例。

我们首先看下分区有什么优缺点:

1.优点:

• 进行逻辑数据分割,分割数据能够有多个不同的物理文件路径

• 可以存储更多的数据,突破系统单个文件最大限制  
• 提升性能,提高每个分区的读写速度,提高分区范围查询的速度
• 可以通过删除相关分区来快速删除数据
• 通过跨多个磁盘来分散数据查询,从而提高磁盘I/O的性能
• 涉及到例如SUM()和COUNT()这样聚合函数的查询,可以很容易地进行并行处理
• 可以备份和恢复独立的分区,这对大数据量很有好处
2.缺点:
• MySQL支持大部分的存储引擎创建分区,如MyISAM、InnoDB等。
• 不支持MERGE和CSV等来创建分区。
• 同一个分区表中的所有分区必须是同一个存储引擎。

接下来我们看下的分区方式:

1.RANGE分区:给定一个连续区间的列值 。

创建方式如下:

  1. CREATE TABLE tbl_users1 (
  2. uuid INT NOT NULL,
  3. name VARCHAR(20),
  4. registerTime VARCHAR(100)
  5. )
  6. PARTITION BY RANGE (uuid) (
  7. PARTITION p0 VALUES LESS THAN (5),
  8. PARTITION p1 VALUES LESS THAN (10),
  9. PARTITION p2 VALUES LESS THAN (15),
  10. PARTITION p3 VALUES LESS THAN MAXVALUE
  11. );

2.LIST分区:LIST是列值匹配一个离散值集合中的某个值来进行选择。

创建方式如下:

  1. CREATE TABLE tbl_users2 (
  2. uuid INT NOT NULL,
  3. name VARCHAR(20),
  4. registerTime VARCHAR(100)
  5. )
  6. PARTITION BY List (uuid) (
  7. PARTITION p0 VALUES in (1,2,3,5),
  8. PARTITION p1 VALUES in (7,9,10),
  9. PARTITION p2 VALUES in (11,15)
  10. );

3.HASH分区:用户定义的表达式的返回值来进行hash计算之后选择的分区,该表达式使用将要插入到表中的这些行的列值进行计算,这个函数必须产生非负整数值。

创建方式如下:

  1. CREATE TABLE tbl_users4 (
  2. uuid INT NOT NULL,
  3. name VARCHAR(20),
  4. registerTime VARCHAR(100)
  5. )
  6. PARTITION BY HASH (uuid) //uuid可以添加表达式,比如/2,或者mod(uuid,2),性能低,每条数据要计算之后在hash然后再插入
  7. PARTITIONS 3;

4.KEY分区:类似于按HASH分区,由MySQL服务器提供其自身的哈希函数。

创建方式如下:

  1. CREATE TABLE tbl_users5 (
  2. uuid INT NOT NULL,
  3. name VARCHAR(20),
  4. registerTime VARCHAR(100)
  5. )
  6. PARTITION BY LINEAR Key (uuid)
  7. PARTITIONS 3;

在后面一篇文章中我们将专门介绍分区操作,这里不再赘述。在分区的时候我们需要注意以下情况:

1.如果表中存在primary key或者unique key时,分区的列是两种中的一个组成部分

2.如果表中不存在任何的primary key或者unique key,则可以指定任何一个列作为分区列
3.5.5版本前的Range、List、Hash分区要求分区键必须是int;MySQL5.5及以上,支持非整型的Range 和List分区,即:range columns 和list columns。
4. MySQL中的分区在禁止空值NULL上没有进行处理,无论它是一个列值还是一个用户定义表达式的值,一 般而言,在这种情况下MySQL把NULL视为0。如果你希望回避这种做法,应该在设计表时声明列“NOT NULL”。
 
最后看下它的注意事项:
 最大分区数目不能超过1024,一般建议对单表的分区数不要超过150个。
 如果含有唯一索引或者主键,则分区列必须包含在所有的唯一索引或者主键之内。
 不支持外键。
 不支持全文索引,对分区表的分区键创建索引,那么这个索引也将被分区。
 按日期进行分区很合适,因为很多日期函数可以用。但是对于字符串来说合适的分区函数不太多。
 只有RANG和LIST分区能进行子分区,HASH和KEY分区不能进行子分区。
 分区表对于单条记录的查询没有优势。
 要注意选择分区的成本,每插入一行数据都需要按照表达式筛选插入的分区。
 分区字段尽量不要可以为null。

 分区的名字基本上遵循其他MySQL标识符应当遵循的原则,例如用于表和数据库名字的标识符。但 是应当注意,分区的名字是不区分大小写的。

 无论使用何种类型的分区,分区总是在创建时就自动的顺序编号,且从0开始记录。


http://www.taodudu.cc/news/show-6844027.html

相关文章:

  • 数据库分区、分表与分库管理
  • 数据库分区的通俗解释
  • 【Oracle database】 Oracle数据库分区表基础
  • oracle数据库分区
  • mysql数据库分区-根据时间分区
  • MySQL数据库表的分区
  • 快快游戏运行库
  • Unity发布Android游戏后检测性能的几个工具
  • Unity性能优化之性能检测工具汇总
  • 游戏测试-功能测试
  • 三款好用的软件代码检测工具
  • 大型互联网分布式系统架构技术要点
  • 星巴克、可口可乐、苹果这些顶级企业是如何进行品牌营销
  • 广告面试题之CTR
  • 广告中的创意哲学
  • 可口可乐从此彻底废除“首席营销官”,设立“首席增长官”
  • 可口可乐病毒营销第六罐
  • 天美时和可口可乐联合推出限量版腕表
  • Win10家庭版注册表禁止更改桌面壁纸
  • 汇编文件.S 和 .s的区别
  • C语言-printf打印%*s、%.*s与%-.*s的区别
  • Linux C语言学习记录(Day2-Day4)
  • 【笔记】行测——常识判断之文史常识总结与归纳(三)
  • HikariPool-1 - Shutdown initiated... HikariPool-1 - Shutdown completed.报错
  • RabbitMQ 403异常:AMQP close-reason, initiated by Peer, code=403
  • [ionShutdownHook]com.zaxxer.hikari.HikariDataSource : HikariPool-1 - Shutdown initiated...
  • Wireshark有线网卡抓包报错The capture session could not be initiated on capture device
  • kali linux 解决wireshark The capture session could not be initiated on capture device “eth0“ 问题
  • RocketMQ TLS Client-initiated 重协商攻击(CVE-2011-1473)
  • 解决Neo4j Server shutdown initiated by request

数据库存储---表分区相关推荐

  1. spark写入oracle 优化,spark读写数据库大表分区性能优化

    spark读写数据库大表分区性能优化:经常会遇到spark读写数据库再做分析,像mysql或oracle. 在数据量很大的情况下,如果只有一个worker一个excutor一个task,那你excut ...

  2. 线上zabbix数据库重建表分区

    线上zabbix数据库重建表分区 发表于:2015-03-5 0 条评论 当前线上zabbix数据按月分区单个分区文件过大,现重新按天分区. 注意事项: 1,"truncate table ...

  3. MySQL数据库分表分区

    防伪码:当你终于沉默,成熟才刚刚开始. 为什么要分表和分区? 我们的数据库数据越来越大,随之而来的是单个表中数据太多.以至于查询书读变慢,而且 由于表的锁机制导致应用操作也搜到严重影响,出现了数据库性 ...

  4. 【原】阿里云RDS数据库超大表分区实现

    [背景] 一张数据量约1亿条数据的表,由于最初设计疏忽,未做分区,现需要根据创建时间字段来做分区: 业务要求,该表仅需要保留3个月的数据,数据量在9千万~1亿3千万左右: 业务允许短时间停机,10分钟 ...

  5. 如何查找BAPI SD_SALESDOCUMENT_CHANGE里字段对应的数据库存储表

    BAPI函数SD_SALESDOCUMENT_CHANGE可以让我们很方便地通过ABAP代码来修改Sales Order. 其输入参数ORDER_HEADER_IN的类型是BAPISDHD1, 里面包 ...

  6. SAP CRM HANA report模型的数据库存储表

    Created by Wang, Jerry, last modified on May 15, 2015 Go to start of metadata CRMV_ANA_OD_SRV id and ...

  7. SQL Server 表分区实战系列(文章索引)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 前言(Introduction) 实战说明(In Action) 表分区逻辑结构图(Construction) 表分区学 ...

  8. 52. SQL Server -- 表分区实战系列(文章索引)

    一.本文所涉及的内容(Contents) 本文所涉及的内容(Contents) 前言(Introduction) 实战说明(In Action) 表分区逻辑结构图(Construction) 表分区学 ...

  9. oracle ods平台建立,如何利用Oracle表分区技术建设ODS平台

    龙源期刊网 http://www.wendangwang.com 如何利用Oracle表分区技术建设ODS平台作者:李永强 来源:<电脑知识与技术>2010年第11期 摘要:该单位目前要在 ...

最新文章

  1. 基于mysql 5.5+mysql-master-ha实现mysql ha架构
  2. 从零点五开始用Unity做半个2D战棋小游戏(七)
  3. 【LeetCode 剑指offer刷题】查找与排序题14:Wiggle Sort(系列)
  4. workman php教程_workerman搭建websocket入门教程,简单实用
  5. 输入法画面_仙剑奇侠传X百度输入法联名纪念版皮肤今日上线
  6. yum 找不到程序,yum更换国内阿里源
  7. 【IT】C语言函数中怎么返回一个二维数组
  8. 设计模式之strategy模式(C++实现)
  9. matlab能流图,有会用MATLAB写海流图的程序吗
  10. 斐波那契数列的递归与迭代写法比较
  11. native字体尺寸自适应 react_React Native之图片/宽高/字体平台适配
  12. MigrationSchemaMissing: Unableto createthe django_migrations
  13. Red Bend与阿朗推LTE移动设备管理 使4G设备兼容OMA DM
  14. 用R包TCGA-Assembler下载TCGA数据
  15. 回归老博客(no zuo no dead)
  16. 在vue中实现父组件调用子组件以及传值
  17. 奇点云数据中台技术汇(一) | DataSimba——企业级一站式大数据智能服务平台
  18. 制作统一样式的H5视频播放器
  19. 爱的五种语言:创造完美的两性沟通
  20. 杨辉三角杨辉三角 || (JavaScript)

热门文章

  1. [转帖]英文电影精彩对白
  2. xp链接wifi显示未连接服务器,xp无线网络未连接
  3. 座位调整问题java_如何提出“调整座位”的要求
  4. STM32系统嘀嗒定时器实现1ms中断事件
  5. 【读过的书】《乖,摸摸头》
  6. QQ安全防护驱动(QQProtect)彻底删除方法
  7. 面试官:怎么做JDK8的内存调优?
  8. Nature Microbiology | 陈云/白洋/虞云龙等鉴定高效抗小麦赤霉病菌株及其作用机制...
  9. javaweb-青橙项目-12-87
  10. mkv格式文件不能播放和字幕问题