数据库分区

MySql―分区表【应用场景/局限性/实现原理/使用教程/实际测试】

匿名 (未验证) 提交于 2019-12-02 22:06:11
一.概述 之所以接触到Mysql表分区,是缘由最近客户公司运营自去年,数据量曾几何暴增,导致表数据非常的庞大,一张表有上亿数据行不止。普通MySql优化,如关键字段索引,字段优化,查询语句优化也已经远远满足不了需求。前期经过开会商讨,给予的方案是:①数据库上:按月建立分表,按年建立分库;②客户端:默认显示当月数据,实现按月查询 ③服务端:按日期进行建表/查表,及相应数据的改/删。此方案基本解决了客户端用户的体验,但是对于针对个别用户要进行数据校验,就要进行从年库汇总,还要从月库汇总累加,服务端代码量的修改,及业务逻辑十分复杂。此时便萌生我们的MySql有没有为我们提供此问题的解决方案,通过了解,查到MySQL--分区表的相关知识。 二.应用场景/为什么要进行分区/优点(MySQL版本在5.1及以上) ①对于那些已经失去保存意义的数据,通常可以通过删除与那些数据有关的分区,很容易地删除那些数据。相反地,在某些 情况下,添加新数据的过程又可以通过为那些新数据专门增加一个新的分区,来很方便地实现。 ②与单个磁盘或文件系统分区相比,可以存储更多的数据。 ③一些查询可以得到极大的优化,这主要是借助于满足一个给定WHERE语句的数据可以只保存在一个或多个分区内,这样 在查找时就不用查找其他剩余的分区。因为分区可以在创建了分区表后进行修改,所以在第一次配置分区方案时还不曾这 么做时

Mysql分区表及自动创建分区Partition

匿名 (未验证) 提交于 2019-12-02 22:06:11
Range分区表建表语句如下,其中分区键必须和id构成主键和唯一键 CREATE TABLE `test1` ( `id` char(32) COLLATE utf8mb4_unicode_ci NOT NULL COMMENT ‘自增主键(guid)‘, `create_time` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT ‘创建时间‘, `partition_key` int(8) NOT NULL COMMENT ‘分区键(格式:yyyyMMdd)‘, PRIMARY KEY (`id`,`partition_key`), UNIQUE KEY `id_UNIQUE` (`id`,`partition_key`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci PARTITION BY RANGE (partition_key) (PARTITION p0 VALUES LESS THAN (20180619) ENGINE = InnoDB, PARTITION p20180619 VALUES LESS THAN (20180620) ENGINE = InnoDB, PARTITION p20180621 VALUES

SparkSQL-通过JDBC读写mysql数据库

匿名 (未验证) 提交于 2019-12-02 22:06:11
object JdbcDatasourceTest { def main(args: Array[String]): Unit = { val spark = SparkSession .builder() .appName("JdbcDatasourceTest") .master("local") .getOrCreate() //url: // jdbc:mysql://master:3306/test // jdbc:oracle://master:3306/test // jdbc:db2://master:3306/test // jdbc:derby://master:3306/test // jdbc:sqlserver://master:3306/test // jdbc:postgresql://master:3306/test val mysqlUrl = "jdbc:mysql://master:3306/test" //1: 读取csv文件数据 val optsMap = Map("header" -> "true", "inferSchema" -> "true") val df = spark.read.options(optsMap).csv(s"${BASE_PATH}/jdbc_demo_data.csv") df.show() val

SparkSQL读写外部数据源-通过jdbc读写mysql数据库

匿名 (未验证) 提交于 2019-12-02 22:06:11
object JdbcDatasourceTest { def main(args: Array[String]): Unit = { val spark = SparkSession .builder() .appName("JdbcDatasourceTest") .master("local") .getOrCreate() //url: // jdbc:mysql://master:3306/test // jdbc:oracle://master:3306/test // jdbc:db2://master:3306/test // jdbc:derby://master:3306/test // jdbc:sqlserver://master:3306/test // jdbc:postgresql://master:3306/test val mysqlUrl = "jdbc:mysql://master:3306/test" //1: 读取csv文件数据 val optsMap = Map("header" -> "true", "inferSchema" -> "true") val df = spark.read.options(optsMap).csv(s"${BASE_PATH}/jdbc_demo_data.csv") df.show() val

MySQL--为什么分区?

匿名 (未验证) 提交于 2019-12-02 22:02:20
  实践背景      项目中有的表空间太大,且行数太多,故决定对一些表进行分库分表。再研究选型方案的时候发现常用的一些分库分表的解决方案对业务代码修改较多,故决定采用MySQL的分区方案。      其实在我个人看来,分区表就是MySQL帮我们实现了底层的分库分表,不需要涉及业务代码的修改,不需要关注分布式事务。因为就访问数据库而言,逻辑上还是只有一个表,但是实际上确有多个物理分区对象组成,会根据具体的分区规则查询具体的分区。      介绍一下这次实践的表,表空间大小172G,1亿2千万条记录。      数据库版本:RDS MySQL 5.6      工具:阿里云DTS      一、为什么分区?      优点:      对已过期或者不需要保存的数据,可以通过删除与这些数据有关的分区来快速删除数据,它的效率远比DELETE高      在where子句中包含分区条件时,可以只扫描必要的一个或者多个分区来提高查询效率      例如下面语句:      SELECT * FROM t PARTITION(p0,p1)WHERE c <5 仅选择与WHERE条件匹配的分区p0和p1中的记录      涉及聚合函数SUM()、COUNT()的查询时,会在每个分区上并行处理      分区把原本一个表的数据存储在多个物理磁盘上,实现了更高的IOPS      缺点:     

linux磁盘管理

匿名 (未验证) 提交于 2019-12-02 21:53:52
1.磁盘分区知识 磁盘分区知识的重点: (1)给磁盘分区的实质就是针对硬盘的0磁头0磁道1扇区的前446字节后面接下来的64bytes的分区表进行设置,即主要是划分起始以及结束磁头号、扇区号和柱面号。 (2)给磁盘分区的工具是fdisk(适合给小于2T的磁盘分区),parted(擅长给大于2T的磁盘分区,也可以给小于2T的磁盘分区),首选fdisk,只有大于2T时才会去选parted (3)一块磁盘的分区表仅有64个bytes大小,每个分区表要占用16个字节,因此一块磁盘支持四个分区表信息,即主分区+扩展分区的总量不超过4个。 (4)磁盘分区是按柱面进行划分的。 (5)扩展分区不能直接使用,还需要在扩展分区的基础上创建逻辑分区才行。 (6)扩展分区有自己的分区表因此扩展分区下面的逻辑分区有多个。 1.1磁盘分区注意事项要点 一块硬盘的分区方式如下组合之一 (1)任意多个主分区,但要求1<=主分区数量<=4 例如:一块硬盘可以分为4个主分区3个主分区2个主分区或者1个主分区 (2)扩展分区可以和主分区组合,但要求2<=(主分区+扩展分区)数量<=4 例如:3个主分区+1个扩展分区或者2个主分区+1个扩展分区或1个主分区+1个扩展分区。当总分区的数量大于4个的时候,必须提前分一个扩展分区。 (3)如果要分成四个磁盘分区的话,那最多可以有两种: P+P+P+P P+P+P+E

大数据之Spark 知识体系完整解读

混江龙づ霸主 提交于 2019-12-02 15:28:56
Spark 简介 Spark 是整个 BDAS 的核心组件,是一个大数据分布式编程框架,不仅实现了MapReduce的算子map 函数和reduce函数及计算模型,还提供更为丰富的算子,如filter、join、groupByKey等。是一个用来实现快速而同用的集群计算的平台。 Spark将分布式数据抽象为弹性分布式数据集(RDD),实现了应用任务调度、RPC、序列化和压缩,并为运行在其上的上层组件提供API。其底层采用Scala这种函数式语言书写而成,并且所提供的API深度借鉴Scala函数式的编程思想,提供与Scala类似的编程接口。 Sparkon Yarn 从用户提交作业到作业运行结束整个运行期间的过程分析。 在这里还是要推荐下我自己建的大数据学习交流群:943791324,群里都是学大数据开发的,如果你正在学习大数据 ,小编欢迎你加入,大家都是软件开发党,不定期分享干货(只有大数据软件开发相关的),包括我自己整理的一份最新的大数据进阶资料和高级开发教程,欢迎进阶中和进想深入大数据的小伙伴加入。 一、客户端进行操作 1.根据yarnConf来初始化yarnClient,并启动yarnClient 2.创建客户端Application,并获取Application的ID,进一步判断集群中的资源是否满足executor和ApplicationMaster申请的资源

高性能可扩展mysql 笔记(三)Hash分区、RANGE分区、LIST分区

眉间皱痕 提交于 2019-12-02 14:36:21
一、MySQL分区表操作 1、定义 :数据库表分区是数据库基本设计规范之一,分区表在物理上表现为多个文件,在逻辑上表现为一个表; 2、表分区的弊端 : 要谨慎选择分区键,错误的操作可能导致跨分区查询效率降低。 建议 采用物理分表的方式管理大数据。 3、确认MySQL服务器是否支持分区表 使用 SHOW PLUGINS;在mysql命令行查看是否具有分区表的功能: ​ 查询结果中的"partition | ACTIVE | STORAGE ENGINE | NULL | GPL "这一行代表当前数据库可以进行数据库分区表操作。 4、普通数据库表的物理结构与分区表的物理结构的区别: ​ 左边为普通表的物理结构,右边为分区后的数据库表物理结构。 一、Hash分区表 (按HASH分区) 1、HASH分区的特点 根据MOD(分区键,分区数)的值把数据行存储到表的不同分区中,使数据可以平均的分布在各个分区中。 注意: HASH分区的键值必须是一个INT类型的值,或是通过函数可以转为INT类型。 2、创建HASH分区: use hash; CREATE TABLE `hash`.`customer_login_log`( customer_id int UNSIGNED not null, login_time TIMESTAMP, login_ip int UNSIGNED, login

Linux之文件系统管理

痴心易碎 提交于 2019-12-02 08:39:46
分区和文件系统 1. 什么是分区: ·· 分区就是对磁盘进行的一种格式化,然后才能使用硬盘保存各种信息,硬盘通常最多可以分成四个实际分区。其中 主分区 最多四个,最少一个, 扩展分区 最多一个,最少0个。 也就是说,主分区加上扩展分区 最多只能有四个 。 那么扩展分区是什么呢?其实扩展分区是用来划分 逻辑分区 的,因为有时候四个分区可能不能满足我们,但是又受限于当前工业水平的限制,最多只有四个分区,所以就可以在四个分区中,选择一个作为扩展分区,专门用来分逻辑分区。使得用户在表面上看来,磁盘被分为多个分区。 分区的好处其实就是索引数据的时候更加快速。因为不用再全盘搜索了,变相的提升了速度 2. 什么是文件系统 文件系统就是:操作系统在存储设备上面组织数据的方法。这个就相当于一种对磁盘的高级格式化,将每一个分区按照自己的操作系统能识别的方式来组织数据。每一种操作系统都有自己的文件系统。比如Windows最开始是fat16,fat32,到现在的NTFS文件系统。Linux由最开始的ext2,ext3,到现在的ext4。 只有将磁盘分区,并且对分区进行格式化之后,操作系统才能写入磁盘,并且操作数据。 3. 常用文件系统结构 ◆硬盘是默认无分区和格式化的。需要安装操作系统的时候做这些操作 ◆移动硬盘是NTFS格式的文件系统,所以苹果系统通常只能读取,Linux通常不能识别,读不出来 ◆USB

Linux 运维

馋奶兔 提交于 2019-12-02 04:40:46
系统介绍 1. 什么是系统?   操作系统(OS), 人与计算机硬件是没有办法直接沟通的, 系统相当于是人与计算机硬件之间的沟通工具。 (直接运行在计算机硬件上的程序) 2. 目前市面上主流的操作系统 Windows - 开源 收费 linux - 开源 免费 unix - 开源 免费 DOS - 嵌入式系统 3. 什么是linux系统 linux 是开源的 多用户 ,多任务的操作系统。 应用领域 服务器领域 (应用中的重中之重) 嵌入式开发 个人PC 桌面 Linux 历史   1969年 unix 诞生在美国电信公司 贝尔实验室, 这奠定了 linux 诞生的基础.   1984年 由于 unix系统面临收费问题, 斯托曼成立自由软件基金会(FSF), 开发了一个GNU 项目, 但是一直没有开发出 hurd 内核. 并且推出了GPL(General Public License) 协议.   1984年 大学教授 谭宁邦 开发了minix 系统, 主要用于教学   1991年 波兰学生 托瓦兹 开发出 linux 内核0.02 版本( 托瓦兹被称为 linux 之父) linux 系统其实是 GUN 项目软件+ linux 内核组成的系统, 也称之为 GNU Linux 系统. Linux 重要知识点 FSF 自由软件基金会 FSF 下面的 GNU 项目. GNU is not