数据库分区

分布式事务CAP定理介绍

纵饮孤独 提交于 2019-12-05 04:03:36
1、 CAP 的来源   1998年,加州大学的计算机科学家EricBrewer提出,分布式系统有三个指标 C onsistency:一致性 A vailability:可用性 P artition tolerance:分区容错性   它们的第一个字母分别是 C、A、P,EricBrewer说这三个指标不可能同时做到,最多只能3选2,这个结论就叫做 CAP 定理。 2、如何取舍?    CA : 如果不要求P(不允许分区),则C(一致性)和A(可用性)是可以保证的,CA系统基本上是单机系统,比如单机数据库。    CP :如果不要求A(可用性),相当于每个请求都需要在Server之间强一致,而P(分区容错性)会导致同步时间无限延长,如此CP也是可以保证的,很多传统的数据库分布式事务都属于这种模式。    AP :要高可用并允许分区,则需放弃一致性。一旦分区发生,节点之间可能会失去联系,为了高可用,每个节点只能用本地数据提供服务,而这样会导致全局数据的不一致性。现在众多的NoSQL都属于此类。 来源: https://www.cnblogs.com/jackcto/p/11904605.html

硬盘分区知识

孤人 提交于 2019-12-05 02:56:26
前言 硬盘使用前,一般要分区,格式化(创建文件系统)<== 存放数据 类比,房子使用前,一般要隔断,装修,买家具,再住人。 分区 一块硬盘: 主分区、扩展分区、逻辑分区 主分区+扩展分区的数量<=4,其中一个主分区可以用一个扩展分区替代,扩展分区最多只能有一个。 扩展分区不能直接使用,还需要在上面创建逻辑分区,逻辑分区可以有多个。 主分区+扩展分区 编号只能是1-4,逻辑分区的编号只能从5开始 示例: 1. 常规分区:数据不是特别重要的业务,例如集群的某个节点 /boot 引导分区 200M 主分区 /swap 交换分区 内存的1.5倍,一旦内存大于8G,给8G即可 / Linux所有目录的顶点,剩余所有空间 2. 数据重要的分区(数据库,存储服务器) /boot 引导分区 200M 主分区 /swap 交换分区 内存的1.5倍,一旦内存大于8G,给8G即可 / Linux所有目录的顶点,100-200G,给定固定的大小 /data 剩下所有,存放数据 3. 特大网站,门户(产品线特别多,需求) /boot 引导分区 200M 主分区 /swap 交换分区 内存的1.5倍,一旦内存大于8G,给8G即可 / Linux所有目录的顶点,100-200G,给定固定的大小 剩余空间不分配,哪个部门领导了服务器,根据需求再进行分区 错误的分区方案: 把/usr, /home,

【数据库】分区分表分库、读写分离(一)

筅森魡賤 提交于 2019-12-05 02:42:21
数据库Sharding的基本思想和切分策略 本文着重介绍sharding的基本思想和理论上的切分策略,关于更加细致的实施策略和参考事例请参考我的另一篇博文: 数据库分库分表(sharding)系列(一) 拆分实施策略和示例演示 一、基本思想 Sharding的基本思想就要把一个数据库切分成多个部分放到不同的数据库(server)上,从而缓解单一数据库的性能问题。不太严格的讲,对于海量数据的数据库,如果是因为表多而数据多,这时候适合使用垂直切分,即把关系紧密(比如同一模块)的表切分出来放在一个server上。如果表并不多,但每张表的数据非常多,这时候适合水平切分,即把表的数据按某种规则(比如按ID散列)切分到多个数据库(server)上。当然,现实中更多是这两种情况混杂在一起,这时候需要根据实际情况做出选择,也可能会综合使用垂直与水平切分,从而将原有数据库切分成类似矩阵一样可以无限扩充的数据库(server)阵列。下面分别详细地介绍一下垂直切分和水平切分. 垂直切分的最大特点就是规则简单,实施也更为方便,尤其适合各业务之间的耦合度非 常低,相互影响很小,业务逻辑非常清晰的系统。在这种系统中,可以很容易做到将不同业 务模块所使用的表分拆到不同的数据库中。根据不同的表来进行拆分,对应用程序的影响也 更小,拆分规则也会比较简单清晰。(这也就是所谓的”share nothing”)。

搜索引擎1

时间秒杀一切 提交于 2019-12-05 02:20:36
lucene 和 es 的前世今生 lucene 是最先进、功能最强大的搜索库。如果直接基于 lucene 开发,非常复杂,即便写一些简单的功能,也要写大量的 Java 代码,需要深入理解原理。 elasticsearch 基于 lucene ,隐藏了 lucene 的复杂性,提供了简单易用的 restful api / Java api 接口(另外还有其他语言的 api 接口)。 · 分布式的文档存储引擎 · 分布式的搜索引擎和分析引擎 · 分布式,支持 PB 级数据 es 的核心概念 Near Realtime 近实时,有两层意思: · 从写入数据到数据可以被搜索到有一个小延迟(大概是 1s ) · 基于 es 执行搜索和分析可以达到秒级 Cluster 集群 集群包含多个节点,每个节点属于哪个集群都是通过一个配置来决定的,对于中小型应用来说,刚开始一个集群就一个节点很正常。 Node 节点 Node 是集群中的一个节点,节点也有一个名称,默认是随机分配的。默认节点会去加入一个名称为 elasticsearch 的集群。如果直接启动一堆节点,那么它们会自动组成一个 elasticsearch 集群,当然一个节点也可以组成 elasticsearch 集群。 Document & field 文档是 es 中最小的数据单元,一个 document 可以是一条客户数据

mysql的分区和分表

删除回忆录丶 提交于 2019-12-04 22:09:56
1,什么是mysql分表,分区 什么是分表,从表面意思上看呢,就是把一张表分成N多个小表,具体请看 mysql分表的3种方法 什么是分区,分区呢就是把一张表的数据分成N多个区块,这些区块可以在同一个磁盘上,也可以在不同的磁盘上 2. mysql分表。 一,先说一下为什么要分表 当一张的数据达到几百万时,你查询一次所花的时间会变多,如果有联合查询的话,我想有可能会死在那儿了。分表的目的就在于此,减小数据库的负担,缩短查询时间。 根据个人经验,mysql执行一个sql的过程如下: 1,接收到sql;2,把sql放到排队队列中 ;3,执行sql;4,返回执行结果。在这个执行过程中最花时间在什么地方呢? 第一,是排队等待的时间,第二,sql的执行时间。其实这二个是一回事,等待的同时,肯定有sql在执行。所以我们要缩短sql的执行时间。 mysql中有一种机制是表锁定和行锁定,为什么要出现这种机制,是为了保证数据的完整性,我举个例子来说吧,如果有二个sql都要修改同一张表的同一条数据,这个时候怎么办呢,是不是二个sql都可以同时修改这条数据呢?很显然mysql对这种情况的处理是,一种是表锁定(myisam存储引擎),一个是行锁定(innodb存储引擎)。 表锁定表示你们都不能对这张表进行操作,必须等我对表操作完才行。行锁定也一样,别的sql必须等我对这条数据操作完了,才能对这条数据进行操作

分库、分区、分表

跟風遠走 提交于 2019-12-04 21:07:05
分库分区分表概念 分区   就是把一张表的数据分成N个区块,在逻辑上看最终只是一张表,但底层是由N个物理区块组成的 分表   就是把一张数据量很大的表按一定的规则分解成N个具有独立存储空间的实体表。系统读写时需要根据定义好的规则得到对应的字表明,然后操作它。表名可以按照某种业务hash进行映射。单表数据量大于500万或者并发大于1200时考虑分表。 分库   一旦分表,一个库中的表会越来越多。当一个数据库的表数量到达一定的量时(>200),此时应该考虑分库。 一、分区   mysql数据库中的数据是以文件的形势存在磁盘上的,默认放在/mysql/data下面(可以通过my.cnf中的datadir来查看),一张表主要对应着三个文件,一个是frm存放表结构的,一个是myd存放表数据的,一个是myi存表索引的。如果一张表的数据量太大的话,那么myd,myi就会变的很大,查找数据就会变的很慢,这个时候我们可以利用mysql的分区功能,在物理上将这一张表对应的三个文件,分割成许多个小块,这样呢,我们查找一条数据时,就不用全部查找了,只要知道这条数据在哪一块,然后在那一块找就行了。如果表的数据太大,可能一个磁盘放不下,这个时候,我们可以把数据分配到不同的磁盘里面去。 分区的二种方式 a,横向分区 什么是横向分区呢?就是横着来分区了,举例来说明一下,假如有100W条数据,分成十份

Hive基础sql语法

扶醉桌前 提交于 2019-12-04 20:52:22
Hive 是基于Hadoop 构建的一套数据仓库分析系统,它提供了丰富的SQL查询方式来分析存储在Hadoop 分布式文件系统中的数据,可以将结构 化的数据文件映射为一张数据库表,并提供完整的SQL查询功能,可以将SQL语句转换为MapReduce任务进行运行,通过自己的SQL 去查询分析需 要的内容,这套SQL 简称Hive SQL,使不熟悉mapreduce 的用户很方便的利用SQL 语言查询,汇总,分析数据。而mapreduce开发人员可以把 己写的mapper 和reducer 作为插件来支持Hive 做更复杂的数据分析。 它与关系型数据库的SQL 略有不同,但支持了绝大多数的语句如DDL、DML 以及常见的聚合函数、连接查询、条件查询。HIVE不适合用于联机 online)事务处理,也不提供实时查询功能。它最适合应用在基于大量不可变数据的批处理作业。 HIVE的特点:可伸缩(在Hadoop的集群上动态的添加设备),可扩展,容错,输入格式的松散耦合。 Hive 的官方文档中对查询语言有了很详细的描述,请参考:http://wiki.apache.org/hadoop/Hive/LanguageManual ,本文的内容大部分翻译自该页面,期间加入了一些在使用过程中需要注意到的事项。 1. DDL 操作 DDL •建表 •删除表 •修改表结构 •创建/删除视图 •创建数据库

hive之建立分区表和分区

我与影子孤独终老i 提交于 2019-12-04 18:49:42
1. 建立分区表 create table 单分区表:其中分区字段是partdate,注意分区字段不能和表字段一样,否则会报重复的错 create table test_t2(words string,frequency string) partitioned by (partdate string) row format delimited fields terminated by '\1'; 多分区表:id在前,address在后, 注意多个分区字段时,是有先后顺序的 create table test_table_hive(name string,school string) partitioned by (id int,address string) row format delimited fields terminated by '\1'; 2. 新建分区:建立分区表之后,此时没有数据,也没有分区,需要建立分区 查看分区命令show partitions: show partitions test_table_hive; 建立单分区 alter table: alter table test_t2 add partition(partdate='20191030'); alter table test_t2 add partition(partdate=20191030

Hive 基础(2):库、表、字段、交互式查询的基本操作

[亡魂溺海] 提交于 2019-12-04 17:23:07
1、命令行操作 (1)打印查询头,需要显示设置: set hive.cli.print.header=true; (2)加"--",其后的都被认为是注释,但 CLI 不解析注释。带有注释的文件只能通过这种方式执行: hive -f script_name (3)-e后跟带引号的hive指令或者查询,-S去掉多余的输出: hive -S -e "select * FROM mytable LIMIT 3" > /tmp/myquery (4)遍历所有分区的查询将产生一个巨大的MapReduce作业,如果你的数据集和目录非常多, 因此建议你使用strict模型,也就是你存在分区时,必须指定where语句 hive> set hive.mapred.mode=strict; (5)显示当前使用数据库 set hive.cli.print.current.db=true; (6)设置 Hive Job 优先级 set mapred.job.priority=VERY_HIGH | HIGH | NORMAL | LOW | VERY_LOW (VERY_LOW=1,LOW=2500,NORMAL=5000,HIGH=7500,VERY_HIGH=10000) set mapred.job.map.capacity=M设置同时最多运行M个map任务 set mapred.job.reduce

Oracle间隔(interval)分区

ε祈祈猫儿з 提交于 2019-12-04 16:05:51
(一)什么是间隔分区 间隔分区是Oracle 11.1引入的新功能,通过该功能,可以在输入相应分区的数据时自动创建相应的分区。在没有间隔分区技术之前,DBA通常会创建一个maxvalue分区以避免ORA-14400:插入的分区键值不能映射到任何分区("inserted partition key does not map to any partition")。 作为范围分区(range partition)的扩展,间隔分区命令数据库在插入表中的数据超过所有现有范围分区时自动创建指定间隔的分区。DBA必须至少指定一个范围分区的较高值,称为过渡点,数据库会自动的为超出该过渡点的数据创建间隔分区,每个间隔分区的下边界是先前范围或间隔分区的上边界。 (二)创建间隔分区 (2.1)间隔分区创建语法 CREATE TABLE table_name ( ... ) PARTITION BY RANGE(column1) INTERVAL expr [STORE IN (tablespace1,[tablespace2,...])] ( PARTITION partition_name1 VALUES LESS THAN(literal | MAXVALUE) [TABLESPACE tablespace1], PARTITION partition_name2 VALUES LESS THAN