数据库分区

Kafka实战解惑

落花浮王杯 提交于 2019-12-09 14:02:01
#一、Kafka简介# Kafka是LinkedIn使用Scala开发的一个分布式消息中间件,它以水平扩展能力和高吞吐率著称,被广泛用于日志处理、ETL等应用场景。Kafka具有以下主要特点: **消息的发布、订阅均具有高吞吐量:**据统计数字表明,Kafka每秒可以生产约25万消息(50 MB),每秒处理55万消息(110 MB)。 **消息可持久化:**消息可持久化到磁盘并且通过Replication机制防止数据丢失。 **分布式系统,可水平扩展:**所有的生产者(Producer)、消费者(Consumer)、消息中间存储(Broker Server)都可实现多实例分布式部署,且在不停机情况下实现水平扩展。 **高可靠性:**消息被处理的状态由消费者同步到Zookeeper而非Broker Server中,当Broker Server失效时,通过副本切换机制选择一个新的Broker Server,消费者在从Zookeeper中读取之前消费消息的位置,不会引起消息丢失。 支持Online和Offline的场景。 随着Kafka开源后被业界成功且广泛的使用,LinkedIn开发Kafka的核心技术人员Jay Kreps离开LinkedIn成立了一个新公司Confluent,打造了一个基于Kafka且拥有更为丰富的产品线,意图构建一个基于Kafka的生态系统,与Kafka相比

【转帖】全网最通俗易懂的Kafka入门

跟風遠走 提交于 2019-12-08 19:09:27
全网最通俗易懂的Kafka入门 http://www.itpub.net/2019/12/04/4597/ 前言 只有光头才能变强。 文本已收录至我的GitHub仓库,欢迎Star:https://github.com/ZhongFuCheng3y/3y 众所周知,消息队列的产品有好几种,这里我选择学习Kafka的原因,无他,公司在用。 我司使用的是Kafka和自研的消息队列(Kafka和RocketMQ)改版,于是我就想学学Kafka这款消息队列啦。本篇文章对Kafka入门,希望对大家有所帮助。 本文知识点提前预览: 这篇文章花了我很长时间画图,目的是希望以最通俗易懂的方式带大家入门,如果觉得不错,希望能给我点个赞! 一、什么是Kafka? 首先我们得去官网看看是怎么介绍Kafka的: https://kafka.apache.org/intro 在收集资料学习的时候,已经发现有不少的前辈对官网的介绍进行翻译和总结了,所以我这里就不重复了,贴下地址大家自行去学习啦: https://scala.cool/2018/03/learning-kafka-1/ https://colobu.com/2014/08/06/kafka-quickstart/ 我之前写过的消息队列入门文章也提到了,要做一个消息队列可能要考虑到以下的问题: 使用消息队列不可能是单机的(必然是分布式or集群)

海量数据处理的SQL性能优化

≡放荡痞女 提交于 2019-12-08 19:07:28
1 设计阶段的优化 1.1 表设计 1.1.1 范式化 数据库设计三范式定义: 1. 第一范式:每个字段只包含最小的信息属性。 例如常见的学号:入学年份+班级+编号,是不符合第一范式的,需要将其拆解为:入学年份、班级、编号。 2. 第二范式:(在满足第一范式基础上) 模型含有主键,非主键字段依赖主键。 3. 第三范式:(在满足第二范式基础上) 模型非主键字段不能相互依赖 。 例如订单表,一般来说订单表的主键是订单号。在此表中,字段下单时间、客户ID是符合第二范式的,而客户姓名这个字段就不满足第二范式,应当放入客户表内,组成客户ID客户姓名。 范式化的设计能有效降低数据冗余,更新方便快速,降低了数据不一致的风险。故常见于联机交易型的数据库。 1.1.2 反范式化 有意不符合范式化的设计,常见于反第二第三范式。 符合三范式的设计在降低冗余的同时也带来了问题。如果需要对数据进行加工处理(例如具有订单表、客户表,需要统计某个年龄的客户的订单总金额)的时候,需要不断进行关联操作。当订单数量极为庞大的时候,这个关联操作所需要消耗的资源将会相当巨大,导致查询性能低下。因此在数据仓库的海量数据的处理中,常使用反范式化的方式进行设计来提高性能,用空间换取时间。例如在订单表内添加上下订单的客户的生日,则只需直接执行筛选即可。 反范式化的设计并没有定势,需要视具体的业务而定

mysql如何处理大量数据

二次信任 提交于 2019-12-08 18:13:11
一、大量数据存储问题解决方法 分区、分表 原则:多利用点内存,减轻磁盘IO负载,因为IO往往是数据库服务器的瓶颈 区别: 1,实现方式上 mysql的分表是真正的分表,一张表分成很多表后,每一个小表都是完正的一张表; 分区不一样,一张大表进行分区后,他还是一张表,不会变成二张表,但是他存放数据的区块变多了 2,数据处理上 分表后,数据都是存放在分表里,总表只是一个外壳,存取数据发生在一个一个的分表里面; 分区呢,不存在分表的概念,分区只不过把存放数据的文件分成了许多小块,分区后的表呢,还是一张表。数据处理还是由自己来 完成。 3,提高性能上 a),分表后,单表的并发能力提高了,磁盘I/O性能也提高了。并发能力为什么提高了呢,因为查寻一次所花的时间变短了,如果 出现高并发的话,总表可以根据不同的查询,将并发压力分到不同的小表里面。磁盘I/O性能怎么搞高了呢, 本来一个非常大的.MYD文件现在也分摊到各个小表的.MYD中去了。 b),mysql提出了分区的概念,我觉得就想突破磁盘I/O瓶颈,想提高磁盘的读写能力,来增加mysql性能。 在这一点上,分区和分表的测重点不同,分表重点是存取数据时,如何提高mysql并发能力上; 而分区呢,如何突破磁盘的读写能力,从而达到提高mysql性能的目的。 4),实现的难易度上 a),分表的方法有很多,用merge来分表,是最简单的一种方式

mysql 大量数据处理问题

泪湿孤枕 提交于 2019-12-08 18:12:56
一、大量数据存储问题解决方法 分区、分表 原则:多利用点内存,减轻磁盘IO负载,因为IO往往是数据库服务器的瓶颈 区别: 1,实现方式上 mysql的分表是真正的分表,一张表分成很多表后,每一个小表都是完正的一张表; 分区不一样,一张大表进行分区后,他还是一张表,不会变成二张表,但是他存放数据的区块变多了 2,数据处理上 分表后,数据都是存放在分表里,总表只是一个外壳,存取数据发生在一个一个的分表里面; 分区呢,不存在分表的概念,分区只不过把存放数据的文件分成了许多小块,分区后的表呢,还是一张表。数据处理还是由自己来完成。 3,提高性能上 a),分表后,单表的并发能力提高了,磁盘I/O性能也提高了。并发能力为什么提高了呢,因为查寻一次所花的时间变短了, 如果出现高并发的话,总表可以根据不同的查询,将并发压力分到不同的小表里面。磁盘I/O性能怎么搞高了呢, 本来一个非常大的.MYD文件现在也分摊到各个小表的.MYD中去了。 b),mysql提出了分区的概念,我觉得就想突破磁盘I/O瓶颈,想提高磁盘的读写能力,来增加mysql性能。 在这一点上,分区和分表的测重点不同,分表重点是存取数据时,如何提高mysql并发能力上;而分区呢,如何突破磁盘的读写能力, 从而达到提高mysql性能的目的。 4),实现的难易度上 a),分表的方法有很多,用merge来分表,是最简单的一种方式

MySQL大表优化方案

坚强是说给别人听的谎言 提交于 2019-12-08 18:12:14
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在 千万级 以下,字符串为主的表在 五百万 以下是没有太大问题的。而事实上很多时候MySQL单表的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量: 字段 尽量使用 TINYINT 、 SMALLINT 、 MEDIUM_INT 作为整数类型而非 INT ,如果非负则加上 UNSIGNED VARCHAR 的长度只分配真正需要的空间 使用枚举或整数代替字符串类型 尽量使用 TIMESTAMP 而非 DATETIME , 单表不要有太多字段,建议在20以内 避免使用NULL字段,很难查询优化且占用额外索引空间 用整型来存IP 索引 索引并不是越多越好,要根据查询有针对性的创建,考虑在 WHERE 和 ORDER BY 命令上涉及的列建立索引,可根据 EXPLAIN 来查看是否用了索引还是全表扫描 应尽量避免在 WHERE 子句中对字段进行 NULL 值判断,否则将导致引擎放弃使用索引而进行全表扫描 值分布很稀少的字段不适合建索引,例如"性别"这种只有两三个值的字段 字符字段只建前缀索引 字符字段最好不要做主键 不用外键,由程序保证约束 尽量不用 UNIQUE

Oracle表空间、段·区·块

六眼飞鱼酱① 提交于 2019-12-07 16:45:17
在Oracle学习过程中,存储结构,表段区块可能是每个初学者都要涉及到的概念。表空间、段、分区和数据块分别表示了Oracle进行数据存储的不同层次和结构。了解清楚这几个结构,有助于我们奠定一个稳固的学习基础,而且对于理解Oracle工作原理也有重要作用。 本文采用从小到大,逐步拓展的方式介绍四个结构,并且与Schema、数据文件的区别进行对比。 数据块(Block) 数据块Block是Oracle存储数据信息的最小单位。注意,这里说的是Oracle环境下的最小单位。Oracle也就是通过数据块来屏蔽不同操作系统存储结构的差异。无论是Windows环境,还是Unix/Linux环境,他们的操作系统存储结构和方式、甚至字符排列的方式都是不同的。Oracle利用数据块将这些差异加以屏蔽,全部数据操作采用对Oracle块的操作,相当于是一个层次的抽象。 Oracle所有对数据的操作和空间分配,实际上都是针对数据块Block的操作。我们从数据表中搜索出一行,实际中Oracle就会从内存缓冲区(或者硬盘)中读取到该行所在的数据块,再返回这数据块上的指定数据行。Oracle无论是在缓冲区,还是在硬盘,进行数据操作的虽小单位也就是数据块。 数据块是有大小的,在一个数据库建立的时候,通过参数进行设置。注意,在Oracle数据库参数中,只有数据块大小的参数是建库之后不能进行修改的。数据块的大小

MySQL大表优化方案

☆樱花仙子☆ 提交于 2019-12-07 15:07:34
当MySQL单表记录数过大时,增删改查性能都会急剧下降,可以参考以下步骤来优化: 单表优化 除非单表数据未来会一直不断上涨,否则不要一开始就考虑拆分,拆分会带来逻辑、部署、运维的各种复杂度,一般以整型值为主的表在 千万级 以下,字符串为主的表在 五百万 以下是没有太大问题的。而事实上很多时候MySQL单表的性能依然有不少优化空间,甚至能正常支撑千万级以上的数据量: 字段 尽量使用 TINYINT 、 SMALLINT 、 MEDIUM_INT 作为整数类型而非 INT ,如果非负则加上 UNSIGNED VARCHAR 的长度只分配真正需要的空间 使用枚举或整数代替字符串类型 尽量使用 TIMESTAMP 而非 DATETIME , 单表不要有太多字段,建议在20以内 避免使用NULL字段,很难查询优化且占用额外索引空间 用整型来存IP 索引 索引并不是越多越好,要根据查询有针对性的创建,考虑在 WHERE 和 ORDER BY 命令上涉及的列建立索引,可根据 EXPLAIN 来查看是否用了索引还是全表扫描 应尽量避免在 WHERE 子句中对字段进行 NULL 值判断,否则将导致引擎放弃使用索引而进行全表扫描 值分布很稀少的字段不适合建索引,例如"性别"这种只有两三个值的字段 字符字段只建前缀索引 字符字段最好不要做主键 不用外键,由程序保证约束 尽量不用 UNIQUE

Spark (三) 性能优化

∥☆過路亽.° 提交于 2019-12-06 20:35:05
参数配置 1、spark-env.sh 2、程序通过SparkConf或System.setProperty 性能观察与日志 1)Web UI。 2)Driver程序控制台日志。 3)logs文件夹下日志。 4)work文件夹下日志。 5)Profiler工具。 调度与分区优化 1.小分区合并 频繁的过滤或者过滤掉的数据量过大就会产生问题,造成大量小分区的产生。Spark是每个数据分区都会分配一个任务执行,如果任务过多,则每个任务处理的数据量很小,会造成线程切换开销大,很多任务等待执行,并行度不高; 解决方式:可以采用RDD中重分区的函数进行数据紧缩,减少分区数,将小分区合并变为大分区。 通过coalesce函数来减少分区。这个函数会返回一个含有numPartitions数量个分区的新RDD,即将整个RDD重分区。 当分区由10000重分区到100时,由于前后两个阶段的分区是窄依赖的,所以不会产生Shuffle的操作。 但是如果分区数量急剧减少,如极端状况从10000重分区为一个分区时,就会造成一个问题:数据会分布到一个节点上进行计算,完全无法开掘集群并行计算的能力。为了规避这个问题,可以设置shuffle=true 由于Shuffle可以分隔Stage,这就保证了上一阶段Stage中的上游任务仍是10000个分区在并行计算。如果不加Shuffle

--Hadoop相关零散知识点

人盡茶涼 提交于 2019-12-06 18:24:25
Hadoop学习笔记: 1 、 Hadoop 三种安装模式 本地模式 :本地模式是 Hadoop 默认的模式,只有 Hadoop 被配置成以非分布式模式运行的一个独立 Java 进程。默认模式下所有 3 个 XML 文件均为空,此时, Hadoop 会完全运行在本地。它只负责存储,没有计算功能。 伪分布式模式 :伪分布式模式是在一台机器上模拟分布式部署,方便学习和调试。使用多个守护线程模拟分布的伪分布运行模式,此时每个 Hadoop 守护进程都作为一个独立的 Java 进程运行。 集群模式 :真正多台机器来搭建分布式集群。 2 、 Hadoop 集群 -- 图解 Hadoop 集群是在同一地点用网络互连的一组通用机器。数据存储和处理都发生在这个机器“云“中。不同的用户可以从独立的客户端提交计算“作业“到 Hadoop ,这些客户端可以是远离 Hadoop 集群的个人台式机。 注:虽非绝对必要,但通常在一个 Hadoop 集群中的机器都是相对同构的 X86 Linux 服务器。而且它们几乎总是位于同一个数据中心,并通常在同一组机架里。 3 、机架结构图 — 图解 节点 : H1 、 H2 、 H3 、 H4 … … 节点 H1 、 H4 、 H7 的机架名对应为: /D1/R1 、 /D1/R2 、 /D2/R3 … … 机架: R1 、 R2 、 R3 … … 数据中心: D1 、