数据库分区

CAP理论

谁说我不能喝 提交于 2019-11-30 01:40:05
这个怎么说呢???网上说的天花乱坠,说什么的都有,很早以前我感觉我理解了,现在回过头完全不知.... 首先我先描述下CAP,然后再详细解释。 1、可用性,也就是所谓的A(Consistency) 是指系统中任何一个节点宕机,其他节点也可以继续对外正常(此处待议)提供服务。 2、一致性,也就是所谓的C(Availability) 这个是比较好理解的,是指数据在任何时候,读取数据都是一致的,此处一致性指的是强一致性。 3、分区容忍性,也就是所谓的P(Partition tolerance) 这个是比较抽象点,分区容忍性强调是指系统中的节点因网络原因中断连接,导致出现分区现象,可以理解原本是整体,节点之间相互交互。出现这个现象和可用性不同地方在于,都可对外提供服务,但因出现分区,如果数据分区存储,就会出现对外提供数据异常。 争议问题 可用性: 什么算可用?什么算不可用?我程序出现异常,返回一个程序异常提示,算可用?如果算,那这个可用性就好处理了,处理不了我就都返回,那我就可以说我的程序是可用的???还是说可用指的是可以正常的业务场景处理,A、B两节点,A节点宕掉,B节点可以继续处理请求。所以,理解不同导致网上说法也大不一样。 一致性: 一致性是指强一致性,虽然时间差距在毫秒也不可否认有差距。大部分主从结构都是这样的,写入主节点后,会有线程会将数据写一份给从库

Linux系统管理——Linux初体验

有些话、适合烂在心里 提交于 2019-11-30 01:29:57
第一章 服务器硬件与Linux初体验 一、Linux系统组成 1、内核 (1)芬兰大学生李纳斯.脱沃兹在 1991 年发布,主要由C语言及小部分汇编开发而成 (2)版本号格式 x.yy.zz ①X:主版本号,用于表示内核结构 ② Y:次版本号,奇数代表开发版本,偶数代表稳定版本 ③Z:修订版本号,同一版本修改的次数 2、外围程序 (1) GPL和LGPL协议 ①软件必须以源代码的形式发布,允许用户任意复制、传递、修改使用及再次发布新的软件版本 ②如果新发布的某个软件使用了受GPL协议保护的任何自由软件的一部分,则发布时也必须遵守GPL协议,将源代码开放并允许其他用户任意复制、传递及修改使用 ③不对使用自由软件的任何用户提供任何形式的责任担保或承诺 ④不排斥对自由软件进行商业性质的包装和发布,也不限制在自由软件的基础上打包发行其他非自由软件 ⑤LGPL允许使用者在自己的程序中使用GNU程序块,而无需公开全部代码 二、发行版本 1、Red Hat 2、Debian 3、Ubuntu 三、系统安装 1、CentOS6-8、Win7 2009sever(虚拟机下安装) (1)创建相应虚拟机 (2)虚拟机光驱路径指向相应镜像文件 (3)启动虚拟机 (4) CentOS需注意开始的文件检查直接跳过(选择检查会耗费很长时间) (5)创建分区 (6)选择安装类型及相应软件服务等 (7

MySQL高级阶段学习

大憨熊 提交于 2019-11-29 21:59:40
数据库分区、分表、分库、分片 分区 数据库分区是一种物理数据库的设计技术,它的目的是为了在特定的SQL操作中减少数据读写的总量以缩减响应时间。 分区并不是生成新的数据库表,而是将表的数据均匀分摊到不同的硬盘,系统或不同服务器存储介子中,实际上还是一张表。另外,分区可以做到将表的数据分摊到不同的地方,提高数据检索的效率,降低数据库频繁IO压力值,分区的优点如下: 相对于单个文件系统或硬盘,分区可以存储更多的数据。 数据管理比较方便,如要清理或废弃某年的数据,就可以直接删除该日期的分区数据即可。 精准定位分区查询数据,不需要全表扫描查询,大大提高检索效率。 可跨多个分区磁盘查询,来提高查询的吞吐量。 在涉及聚合函数时,很容易进行数据的合并。 水平分区 这种形式分区是对表的行进行分区,通过这种的方式不同分组里面的物理列分割的数据集得以组合,从而进行个体分体或集体分割。所有在表中定义的列在每个数据集中都能找到,所以表的特性得以保持。 举例:一个包含十年发票记录的表可以被分区为10个不同的分区,每个分区包含的是其中一年的记录。 垂直分区 这种分区方式一般来说是通过对表的垂直划分来减少目标表的宽度,使某些特定的列被划分到特定的分区,每个分区都包含了其中的列所对应的行。 举例:一个包含了大text和blob列的表,这些text和blod列又不经常被访问

【Linux】【2】VMware虚拟机安装Linux系统

别等时光非礼了梦想. 提交于 2019-11-29 19:50:50
前言: VMware虚拟机安装好了之后,我们就要给它安装上Linux系统了。我用的是:CentOS-6.3版本64位 正文: 1,Linux系统镜像文件下载 一定要注意下的是64位,还是32位的。检查命令:file /bin/ls 下载地址:百度网盘 链接:https://pan.baidu.com/s/1CW7EYw5ZS4B5EOQdMZ9CLw 提取码:itxe 2,安装Linux系统 (1)点击VMware的虚拟机界面,选择我们创建好的虚拟机CentOS6.6,然后双击虚拟机中模拟的光驱设备 (2)更改光驱设置,使用ISO映像文件来安装linux系统,选择后点击确定。 (3)开启该虚拟机,相当于打开电脑的电源启动电脑。 (4)开启虚拟机后,将虚拟机的光盘设置,改为下面的设置,即勾选“已连接”和“启动时连接”。其实开启该虚拟机后默认就勾选上了,不过最好还是检查一下。 (5)如果光盘镜像文件被正确加载和识别的话,就会出现下面的光盘启动界面。如果报错,就重启该虚拟机,并保证光盘设置正确。 这5个选项的意思: Install or upgrade an existing system:安装系统或升级系统(安装系统时就是用这个选项)。 Install system with basic video driver:采用基本的显卡驱动安装系统。 Rescue installed

mysql数据库优化概述详解

十年热恋 提交于 2019-11-29 18:05:09
mysql查询的过程图 为什么要优化 系统的吞吐量瓶颈往往出现在数据库的访问速度上 随着应用程序的运行,数据库的中的数据会越来越多,处理时间会相应变慢 数据是存放在磁盘上的,读写速度无法和内存相比 如何优化 设计数据库时:数据库表、字段的设计,存储引擎 利用好MySQL自身提供的功能,如索引等 横向扩展:MySQL集群、负载均衡、读写分离 SQL语句的优化(收效甚微) 一、字段设计阶段 选取最适用的字段属性 1. 字段的宽度设得尽可能小 MySQL可以很好的支持大数据量的存取,但是一般说来,数据库中的表越小,在它上面执行的查询也就会越快。因此,在创建表的时候,为了获得更好的性能,我们可以将表中字段的宽度设得尽可能小。 2. 尽量把字段设置为NOTNULL 在可能的情况下,应该尽量把字段设置为NOTNULL,这样在将来执行查询的时候,数据库不用去比较NULL值。 3. 确定数据定义为ENUM类型 对于某些文本字段,例如“省份”或者“性别”,我们可以将它们定义为ENUM类型。因为在MySQL中,ENUM类型被当作数值型数据来处理,而数值型数据被处理起来的速度要比文本类型快得多。这样,我们又可以提高数据库的性能。 4. 单表字段不宜过多,可以预留字段 满足业务需求的前提下二三是个字段就是极限了,可以预留字段便于扩展。 遵循数据表的设计规范 1. 第一范式(1NF) 字段值具有原子性

写给 Java 程序员的 24 个MySQL面试题,拿走不谢!

核能气质少年 提交于 2019-11-29 08:09:48
一、为什么用自增列作为主键?   1、如果我们定义了主键(PRIMARY KEY),那么InnoDB会选择主键作为聚集索引。   如果没有显式定义主键,则InnoDB会选择第一个不包含有NULL值的唯一索引作为主键索引。   如果也没有这样的唯一索引,则InnoDB会选择内置6字节长的ROWID作为隐含的聚集索引(ROWID随着行记录的写入而主键递增,这个ROWID不像ORACLE的ROWID那样可引用,是隐含的)。   2、数据记录本身被存于主索引(一颗B+Tree)的叶子节点上,这就要求同一个叶子节点内(大小为一个内存页或磁盘页)的各条数据记录按主键顺序存放   因此每当有一条新的记录插入时,MySQL会根据其主键将其插入适当的节点和位置,如果页面达到装载因子(InnoDB默认为15/16),则开辟一个新的页(节点)   3、如果表使用自增主键,那么每次插入新的记录,记录就会顺序添加到当前索引节点的后续位置,当一页写满,就会自动开辟一个新的页   4、如果使用非自增主键(如果身份证号或学号等),由于每次插入主键的值近似于随机,因此每次新纪录都要被插到现有索引页得中间某个位置   此时MySQL不得不为了将新记录插到合适位置而移动数据,甚至目标页面可能已经被回写到磁盘上而从缓存中清掉,此时又要从磁盘上读回来,这增加了很多开销   同时频繁的移动、分页操作造成了大量的碎片

第4章 DDL数据定义

瘦欲@ 提交于 2019-11-29 07:06:38
第 4 章 DDL 数据定义 4.1 创建数据库 1 )创建一个数据库,数据库在 HDFS 上的默认存储路径是 /user/hive/warehouse/*.db 。 hive (default)> create database db_hive; 2 )避免要创建的数据库已经存在错误,增加 if not exists 判断。(标准写法) hive (default)> create database db_hive; FAILED: Execution Error, return code 1 from org.apache.hadoop.hive.ql.exec.DDLTask. Database db_hive already exists hive (default)> create database if not exists db_hive; 3 )创建一个数据库,指定数据库在 HDFS 上存放的位置 hive (default)> create database db_hive2 location '/db_hive2.db'; 4.2 查询数据库 4.2.1 显示数据库   1 .显示数据库 hive> show databases;   2 .过滤显示查询的数据库 hive> show databases like 'db_hive*'; OK db_hive

【原】Sql Server性能优化——Partition(管理分区)

别来无恙 提交于 2019-11-29 06:37:23
正如上一篇文章 SqlServer性能优化——Partition(创建分区) 中所述,分区并不是一个一劳永逸的操作,对一张表做好分区仅仅是开始,接下来可能需要频繁的变更分区,管理分区。 在企业管理器中,虽然有“管理分区”的菜单,里面的内容却可能与你的预想不同,这里并没有提供直接对分区进行操作的方法,所以一些普通的操作,比如“ 增加分区 ”、“ 删除分区 ”之类的操作就需要通过脚本实现了。 增加分区(Split Partition) “ 增加分区 ”事实上就是将现有的分区分割开,基于此,在SQL Server中应用的是Split操作。在 分离分区 的时候,不仅仅要在Partition Function上指定分割的分界点,同样需要在Partition Scheme上指定新分区应用的文件组: --指定下一个分区应用文件组PRIMARY ALTER PARTITION SCHEME [MyPartitionSchema] NEXT USED [PRIMARY] --指定分区分界点为5000 ALTER PARTITION FUNCTION MyPartitionFunction() SPLIT RANGE (5000) 需要注意的一点是, 新增的分区中非聚簇索引的压缩模式会被置为None 。 删除分区(Merge Partition) “ 删除分区

sqlserver 创建分区表

空扰寡人 提交于 2019-11-29 04:50:10
我们知道很多事情都存在一个分治的思想,同样的道理我们也可以用到数据表上,当一个表很大很大的时候,我们就会想到将表拆 分成很多小表,查询的时候就到各个小表去查,最后进行汇总返回给调用方来加速我们的查询速度,当然切分可以使用横向切分,纵向 切分,比如我们最熟悉的订单表,通常会将三个月以外的订单放到历史订单表中,这里的三个月就是将订单表进行切分的依据。 1 需求说明 将数据库Demo中的表按照日期字段进行水平分区分表。要求数据文件按一年一个文件存储,且分区的分割点会根据时间的增长自动添加(例如现在是2017年1月1日,将其作为一个分割点,即将2017年1月1日之前的数据存储到数据文件A中,将2017年1月1日的之后的数据存储到数据文件B中;当时间到2018年1月1日时,自动将2018年1月1日添加为一个新的分区分割点,并将2017年1月1日至2018年1月1日的数据存储在数据文件B中,将2018年1月1日之后的数据存储在一个新的数据文件C中,以此类推)。 2 实现思路 2.1 分区原理 要实现这一功能,首先要了解数据库对水平分区表进行分区存储的原理。 所谓水平分区分表,就是把逻辑上的一个表,在物理上按照你指定的规则分放到不同的文件里,把一个大的数据文件拆分为多个小文件,还可以把这些小文件放在不同的磁盘下。这样把一个大的文件拆分成多个小文件,便于我们对数据的管理。 2.2 水平分区优点 l

Kafka--生产者

瘦欲@ 提交于 2019-11-28 23:07:13
一个应用程序在很多情况下需要往Kafka写入消息:记录用户的活动(用于审计和分析),记录度量指标,保存日志消息,记录智能家电的信息,与其他应用程序进行异步通信,缓冲即将写入到数据库的数据,等等。 多样的使用场景意味着多样的需求:是否每个消息都很重要?是否允许丢失一小部分消息?偶尔出现重复消息是否可以接受?是否有严格的延迟和吞吐量要求? 不同的使用场景对生产者API的使用和配置会有直接的影响。 消息发送过程 首先创建一个ProducerRecord对象。   ProducerRecord对象包含目标主题和要发送的内容。   可以指定键或分区。 如果有键的话,将键序列化成字节数组,以便在网络上传输。同样地,要发送的内容,即值,也需要序列化成字节数组。 接下来,数据被传给分区器。   如果之前在ProducerRecord对象里指定了分区,那么分区器就不会再做任何事情,直接把指定的分区返回。   如果没有指定分区,那么分区器会根据ProducerRecord对象的键来选择一个分区。 选好分区后,生产者就知道该往哪个主题和分区发送记录了。 紧接着,这条记录被添加到了一个记录批次里。   这个批次里的所有消息都会被发送到相同的主题和分区上。   有一个独立的线程负责把这些记录批次发送到相应的broker上。 服务器在收到这些消息时会返回一个相应。   如果消息成功写入Kafka