数据库分区

SQL Server On Linux(21)—— SQL Server On Linux性能(7)——性能进阶简介——分区(1)

感情迁移 提交于 2020-01-20 08:05:55
本人新书上市,请多多关照: 《SQL Server On Linux运维实战 2017版从入门到精通》 本篇开始专门对性能进行一系列讲解,这一系列不限于Linux平台,更多的是针对SQL Server本身。 SQL Server性能新特性   SQL Server发展至今,为了不断提升性能,引入了不少最新技术。它们主要以分区表/索引,In-Memory OLTP 和列存储索引这三类核心技术为主。虽然这些技术有各自的使用场景,但是都具有一个共同的目标:针对关键系统大幅度提高性能。这些功能不仅仅是提升性能,而且还是大幅度提升!   接下来会简单介绍这三种技术,有机会的话再细说具体技术。由于工作需要,首先从分区表和分区索引入手。 分区表和分区索引   这个严格意义来说不能称为“新技术“,因为从SQL Server 2005开始就有了。而且业界很多数据库产品都有分区功能。分区的出现源自于大量关系数据的出现。当一个表存储了亿级(请更新你对几百万行数据就成为“大表“的叫法),增删改查的性能将明显下降,其维护成本(比如备份/重建索引/更新统计信息等等)都会变得非常大。   因此,业界通常会对表进行拆分操作。拆分通常有***垂直拆分***和***横向拆分***, 垂直拆分大概就是把一个有很多列的表,按照业务逻辑,拆成多个行数相等但是列数更少的表。这种拆分***并不减少数据行数***

Oracle的存储结构关系

断了今生、忘了曾经 提交于 2020-01-20 03:14:07
oracle数据库的整体结构 数据库的结构关系   其实,我前面一篇讲表空间的时候就介绍了数据库的结构,只是那个图只是简单的层次关系,这张图片看上去挺封复杂的,只要关注几个概念就行了。 Database (数据库) :数据库是按照数据结构来组织、存储和管理数据的仓库。 Tablespaces (表空间) :表空间是数据库的逻辑划分,一个表空间只能属于一个数据库。所有的数据库对象都存放在指定的表空间中。但主要存放的对象是表, 所以称作表空间。 Segments (段) : 段是表空间的重要组织结构,段是指占用数据文件空间的通称,或数据库对象使用的空间的集合;段可以有表段、索引段、回滚段、临时段和高速缓存段等。 extents (盘区) :是数据库存储空间分配的一个逻辑单位,它由连续数据块所组成。第一个段是由一个或多个盘区组成。当一段中间所有空间已完全使用,oracle 为该段分配一个新的范围。 Data Block (数据块) : 是 oralce 管理数据文件中存储空间的单位,为数据库使用的 I/O 的最小单位,其大小可不同于操作系统的标准 I/O 块大小。 ( Storage Clause Precedence )存储规范优先   Oracle 在存储控制上可以分为三个方式。 oracle 缺省级别、表空间级别、段级别,可以理解中央、省级、县级。从中央到地方的法规条例

Apache Kafka 消息队列

时光怂恿深爱的人放手 提交于 2020-01-19 16:19:50
概述 Kafka是Apache软件基金会的开源的流处理平台,该平台提供了消息的订阅与发布,能够基于Kafka实现对网络日志流实时在线处理,在这个维度上弥补了Hadoop的离线分析系统的不足。因为基于hadoop的MapReduce系统分析离线数据延迟较高,而且不支持动态数据处理和分析。Kafka的流处理平台不仅仅可以为离线系统储备数据(通常使用Kafka作为数据缓冲),而且Kafka自身也提供了一套数据流的处理机制,实现对数据流在线处理,比如: 统计。 作为消息队列(Message Queue)充当系统的缓冲组件 - MiddleWare 作为一套在线实时流处理 组件 (轻) 场景分析 异步消息 使用Kafka MQ功能实现模块间异步通信,把一些费时的操作交给额外的服务或者设备去执行,这样可以提升系统运行效率,加速连接释放的速度,例如:用户注册模块,在用户注册成功后,业务系统需要给用户发送一个通知短信,通知用户登录邮箱去激活刚注册的用户信息。这种业务场景如图所示,因为短信通知和邮件发送是一个比较耗时的操作,所以在这里没必要将短信和邮件发送作为注册模块的流程,使用Message Queue功能可以将改业务和主业务注册分离,这样可以缩短用户浏览器和服务建立的链接时间,同时也能满足发送短信和邮件的业务。 系统间解耦|削峰填谷 ①在某些高吞吐的业务场景下

kafka

自闭症网瘾萝莉.ら 提交于 2020-01-19 08:28:17
学习kafka必会名词 producer:生产者,就是它来生产“鸡蛋”的。 consumer:消费者,生出的“鸡蛋”它来消费。 topic:你把它理解为标签,生产者每生产出来一个鸡蛋就贴上一个标签(topic),消费者可不是谁生产的“鸡蛋”都吃的,这样不同的生产者生产出来的“鸡蛋”,消费者就可以选择性的“吃”了。相当于“队列” broker:就是篮子了。 kafka的架构 一个典型的Kafka包含若干Producer,若干broker(Kafka支持水平扩展,一般broker越多,吞吐量越高),若干Consumer Group,以及一个zookeeper集群,通过zookeeper管理集群配置,选举leader,Producer使用push将消息发送到broker,Consumer使用pull模式从broker订阅并消费消息。 Kafka会为每一个Consumer Group保留一些metadata信息——当前消费的消息的position,也即offset。这个offset由Consumer控制。正常情况下Consumer会在消费完一条消息后递增该offset。 使用Consumer high level API时,同一Topic的一条消息只能被同一个Consumer Group内的一个Consumer消费,但多个Consumer Group可同时消费这一消息。 优化:

分布式CAP定理,为什么不能同时满足三个特性?

前提是你 提交于 2020-01-19 00:08:18
在弄清楚这个问题之前,我们先了解一下什么是分布式的CAP定理。 根据百度百科的定义,CAP定理又称CAP原则,指的是在一个分布式系统中,Consistency(一致性)、 Availability(可用性)、Partition tolerance(分区容错性),最多只能同时三个特性中的两个,三者不可兼得。 一、CAP的定义 Consistency (一致性): “all nodes see the same data at the same time”,即更新操作成功并返回客户端后,所有节点在同一时间的数据完全一致,这就是分布式的一致性。一致性的问题在并发系统中不可避免,对于客户端来说,一致性指的是并发访问时更新过的数据如何获取的问题。从服务端来看,则是更新如何复制分布到整个系统,以保证数据最终一致。 Availability (可用性): 可用性指“Reads and writes always succeed”,即服务一直可用,而且是正常响应时间。好的可用性主要是指系统能够很好的为用户服务,不出现用户操作失败或者访问超时等用户体验不好的情况。 Partition Tolerance (分区容错性): 即分布式系统在遇到某节点或网络分区故障的时候,仍然能够对外提供满足一致性或可用性的服务。 分区容错性要求能够使应用虽然是一个分布式系统,而看上去却好像是在一个可以运转正常的整体

吴裕雄--天生自然ORACLE数据库学习笔记:表分区与索引分区

拜拜、爱过 提交于 2020-01-17 19:16:47
create table ware_retail_part --创建一个描述商品零售的数据表 ( id integer primary key,--销售编号 retail_date date,--销售日期 ware_name varchar2(50)--商品名称 ) partition by range(retail_date) ( --2011年第一个季度为part_01分区 partition par_01 values less than(to_date('2011-04-01','yyyy-mm-dd')) tablespace TBSP_1, --2011年第二个季度为part_02分区 partition par_02 values less than(to_date('2011-07-01','yyyy-mm-dd')) tablespace TBSP_1, --2011年第三个季度为part_03分区 partition par_03 values less than(to_date('2011-10-01','yyyy-mm-dd')) tablespace TBSP_2, --2011年第四个季度为part_04分区 partition par_04 values less than(to_date('2012-01-01','yyyy-mm-dd'))

数据库分区分表以及读写分离

断了今生、忘了曾经 提交于 2020-01-17 03:37:34
Oracle数据库分区是作为Oracle数据库性能优化的一种重要的手段和方法,做手头的项目以前,只聆听过分区的大名,感觉特神秘,看见某某高手在讨论会上夸夸其谈时,真是骂自己学艺不精,最近作GPS方面的项目,处理的数据量达到了几十GB,为了满足系统的实时性要求,必须提高数据的查询效率,这样就必须通过分区,以解燃眉之急! 先说说分区的好处吧! 1) 增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用; 2) 维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可; 3) 均衡I/O:可以把不同的分区映射到磁盘以平衡I/O,改善整个系统性能; 4) 改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。 Oracle数据库提供对表或索引的分区方法有三种: ü 范围分区 ü Hash分区(散列分区) ü 复合分区 一、范围分区详细说明 范围分区就是对数据表中的某个值的范围进行分区,根据某个值的范围,决定将该数据存储在哪个分区上。如根据序号分区,根据时间等来进行分区。根据序号,比如小于2000000的放在part01, 2000000~4000000的放在part02。。。 create table AAA ( id number primary key, indate date not null ) partition by range

【Hive】Hive基础知识

我怕爱的太早我们不能终老 提交于 2020-01-16 08:18:10
文章目录 1. hive产生背景 2. hive是什么 3. hive的特点 3.1优点: 3.2 缺点: 4. Hive 和 RDBMS 的对比 5. hive架构 5.1 用户接口层 5.2 Thrift Server层 5.3 元数据库层 5.4 Driver核心驱动层 6. hive的数据存储(整理一) 7. hive的数据组织形式(整理二) 7.1 库 7.2 表 7.2.1 从数据的管理权限分 7.2.1.1 内部表(管理表、managed_table) 7.2.1.2 外部表(external_table) 7.2.2 从功能上分 7.2.2.1 分区表 7.2.2.2 分桶表 7.3 视图 7.4 数据存储 7.4.1 元数据 7.4.2 表数据(原始数据) 1. hive产生背景 先分析mapreduce: mapreduce主要用于数据清洗或统计分析工作 并且绝大多数的场景都是针对的结构化数据的分析 而对于结构化的数据处理我们想到sql 但数据量非常大时,没办法使用mysql等,只能使用mapreduce 可是 mapreduce 的 缺点 是: 编程不便、成本太高 hive的诞生: 如果有一个组件可以针对大数据量的结构化数据进行数据分析,但是又不用写mapreduce,直接用sql语句实现就完美了 所以hive就诞生了 直接使用 MapReduce

Hive(5)-DDL数据定义

笑着哭i 提交于 2020-01-16 06:42:59
一. 创建数据库 CREATE DATABASE [IF NOT EXISTS] database_name [COMMENT database_comment] [LOCATION hdfs_path] [WITH DBPROPERTIES (property_name=property_value, ...)]; 字段解释: 1). IF NOT EXISTS : 避免要创建的数据库已经存在 2). COMMENT : 给数据库添加一个备注 3). LOCATION : 如果不指定路径,默认的存储路径是HDFS的/user/hive/warehouse/*.db 4). WITH DBPROPERTIES : 给数据库添加一些自定的<key,value> create database if not exists hive_db comment 'my fisrt database' location '/first_database' with dbproperties ('createtime' = '20181218'); Hive默认不支持中文,但是可以改 1). 修改hive_site.xml中的参数 <property> <name>javax.jdo.option.ConnectionURL</name> <value>jdbc:mysql://hadoop102

MySQL的分区、分表、集群

烂漫一生 提交于 2020-01-16 05:40:52
1.分区 mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可以通过my.cnf中的datadir来查看),一张表主要对应着三个文件,一个是frm存放表结构的,一个是myd存放表数据的, 一个是myi存表索引的。如果一张表的数据量太大的话,那么myd,myi就会变的很大,查找数据就会变的很慢,这个时候我们可以利用mysql的分区功能, 在物理上将这一张表对应的三个文件,分割成许多个小块,这样呢,我们查找一条数据时,就不用全部查找了,只要知道这条数据在哪一块,然后在那一块找就行了。 如果表的数据太大,可能一个磁盘放不下,这个时候,我们可以把数据分配到不同的磁盘里面去 分区的二种方式 a,横向分区 什么是横向分区呢?就是横着来分区了,举例来说明一下,假如有100W条数据,分成十份,前10W条数据放到第一个分区,第二个10W条数据放到第二个分区,依此类推。也就是把表分成了十分,根用merge来分表,有点像哦。取出一条数据的时候,这条数据包含了表结构中的所有字段,也就是说横向分区,并没有改变表的结构。 b,纵向分区 什么是纵向分区呢?就是竖来分区了,举例来说明,在设计用户表的时候,开始的时候没有考虑好,而把个人的所有信息都放到了一张表里面去,这样这个表里面就会有比较大的字段,如个人简介,而这些简介呢,也许不会有好多人去看,所以等到有人要看的时候