数据库分区

Oracle面试题(基础篇)(转)

大城市里の小女人 提交于 2019-12-03 14:37:39
1. Oracle跟SQL Server 2005的区别? 宏观上: 1). 最大的区别在于平台,oracle可以运行在不同的平台上,sql server只能运行在windows平台上,由于windows平台的稳定性和安全性影响了sql server的稳定性和安全性 2). oracle使用的脚本语言为PL-SQL,而sql server使用的脚本为T-SQL 微观上: 从数据类型, 数据库 的结构等等回答 2. 如何使用Oracle的游标? 1). oracle中的游标分为显示游标和隐式游标 2). 显示游标是用cursor...is命令定义的游标,它可以对查询语句(select)返回的多条记录进行处理;隐式游标是在执行插入 (insert)、删除(delete)、修改(update)和返回单条记录的查询(select)语句时由PL/SQL自动定义的。 3). 显式游标的操作:打开游标、操作游标、关闭游标;PL/SQL隐式地打开SQL游标,并在它内部处理SQL语句,然后关闭它 3. Oracle中function和procedure的区别? 1). 可以理解函数是存储过程的一种 2). 函数可以没有参数,但是一定需要一个返回值,存储过程可以没有参数,不需要返回值 3). 函数return返回值没有返回参数模式,存储过程通过out参数返回值, 如果需要返回多个参数则建议使用存储过程

宜信的105条数据库军规

ⅰ亾dé卋堺 提交于 2019-12-03 13:40:59
作为一家金融科技企业,宜信的大量业务都依赖于数据库。如何提高公司整体数据库应用水平,是对DBA的一大挑战,也非常具有现实意义。笔者在宜信的多年工作中,与团队一起总结整理了针对传统关系型数据库的使用规则,并借助自研的数据库审核平台落地,借此帮助研发团队评估数据库开发质量,达到尽早发现问题、解决问题之目的。下图正是这一系统的简单原理图。 如上图所示,针对规则部分又可细分为如下分类(部分)。简单描述如下,后面将逐一详细说明。 一、Oracle规则(对象) 1.1 表、分区 【规则1】 规则说明:超过指定规模且没有分区的表。 规则阈值:2GB(物理大小超过指定阀值)。 规则描述:表的规模过大,将影响表的访问效率、增加维护成本等。常见的解决方案就是使用分区表,将大表转换为分区表。 【规则2】 规则说明:单表或单分区记录数量过大。 规则阈值:1000000(单表或单分区记录数超过指定阀值)。 规则描述:控制单个表或单个分区的数据规模,提高单一对象的访问效率。如记录数过多,应考虑分库、分表、分区等策略。 【规则3】 规则说明:大表过多。 规则阈值:自定义(超过2G的表的数量过多)。 规则描述:大表在所有表中所占比例超过20%(OLTP)或95%(OLAP)。 【规则4】 规则说明:单表分区数量过多。 规则阈值:500(单表分区数量超过指定阀值)。 规则描述:分区表中分区数量过多

京东消息中间件JMQ(转)

牧云@^-^@ 提交于 2019-12-03 10:34:17
http://blog.csdn.net/javahongxi/article/details/54411464 [京东技术]京东的MQ经历了JQ->AMQ->JMQ的发展,其中JQ的基于关系数据库,严格意义上讲称不上消息中间件,JMQ的存储是JFS和HBase,AMQ即ActiveMQ,本文说说JMQ。 JMQ是京东自主研发的一款消息中间件系统,具有高可用、数据高可靠等特性。广泛应用于公司内部系统,包括订单、支付、库房等场景。 整体结构   系统包括服务端、客户端、管理端与其他支撑模块。       详细架构 AMQ JMQ 服务端   服务端提供了配置信息分发、重试消息管理和消息存储与分发这三大类功能。每个服务端实例都具备这三类功能的服务能力,但是在实际部署上这三类功能对应三个不同的集群,对应每一个实例功能不叠加。在测试环境和库房等资源有限的环境下,这三类功能由同一个服务端实例提供服务。   配置信息分发:负责客户端参数变更时与消息分配的服务端实例变更时通知客户端。   重试消息管理:主要用于对业务系统临时处理不了的消息进行存放,然后再按照一定的策略投递给客户端处理。可以提供错误原因、错误处理次数等查询。   消息存储与分发:接收生产者投递的消息,把消息存放在本地磁盘上,消费者从该服务上拉取消息进行消费。      客户端  

【转】数据库优化的几个阶段

家住魔仙堡 提交于 2019-12-03 09:14:16
转自: https://www.cnblogs.com/rjzheng/p/9619855.html#4365629 引言 大家在面试的时候,是否遭遇过,面试官询问 你们是如何进行数据库优化的? 那这个问题应该怎么答呢?其实写这个题材的原因是我这几天看到各公众号转的一篇数据库调优的知识(不上链接了),我就稍微翻了几下,上面动不动就来说要对数据库进行 水平拆分 ,我就想反问各位读者,你们几个人经历过 水平拆分 ?现在很多文章,实践性实在太差,只能说纯理论分析。 这篇文章最早来自知乎的一个提问,我在其基础上完善了一下。 第一阶段 优化sql和索引 这才是调优的第一阶段啊, 为什么呢? 因为这一步成本最低啊,不需要加什么中间件。你没经过索引优化和SQL优化,就来什么 水平拆分 ,这不是坑人么。 那 步骤 是什么样呢?我说个大概 (1)用慢查询日志定位执行效率低的 SQL 语句,开启慢查询日志方式: (2)用 explain 分析 SQL 的执行计划 (3)确定问题,采取相应的优化措施,建立索引啊,等 我就不举例了,因为如何优化SQL的文章,一抓一大把,再贴过来,读者看着也累。 第二阶段 搭建缓存 在优化sql无法解决问题的情况下,才考虑搭建缓存。毕竟你使用缓存的目的,就是将复杂的、耗时的、不常变的执行结果缓存起来,降低数据库的资源消耗。 这里需要 注意 的是:搭建缓存后

订单表优化方案

别等时光非礼了梦想. 提交于 2019-12-03 07:59:45
目录 1 背景 2 常用思路 2.1 单表分区 2.2 大表分表 2.3 业务分库 2.4 读写分离和集群 2.5 热点缓存 2.6 用ES代替DB 3 订单表优化方案 3.1 业务分析 3.2 分区方案(order_sku/order_product_attr/order_sku_epay) 3.2 历史表+分区方案(order_info) 附录 1 背景 随着用户不断下单,DB订单表和订单附属表的单表记录数过大,影响到前端和管理系统拉取订单列表的性能。单表最大多少行合适与具体业务有关,难以下定论,但一般推荐不要超过1千万行,之后单表的性能下降会比较明显。 本文档整理了数据库大表优化的一些常用思路的原理,最后针对订单表提出优化方案。 2 常用思路 单表分区 大表分表 业务分库 读写分离和集群 热点缓存 用ES代替DB 2.1 单表分区 什么是分区? 就是将一张表的单个大文件,按一定逻辑拆分成多个物理的区块文件。对于应用程序来说,还是一张整表;但底层实际上是由多个物理区块组成。目前主流的DB如Oracle、MySql等都有成熟的方案支持分区 MySql支持哪些分区类型? range分区:根据key的范围来分区,比如日志表,可以按天或按月分区 list分区:根据key的枚举值分区,比如以订单状态为key,待付款、待发货、待收货等分别建立一个分区 hash分区:给定分区数

Hive 教程(四)-分区表与分桶表

不问归期 提交于 2019-12-03 07:07:24
在 hive 中分区表是很常用的,分桶表可能没那么常用,本文主讲分区表。 概念 分区表 在 hive 中,表是可以分区的,hive 表的每个区其实是对应 hdfs 上的一个文件夹; 可以通过多层文件夹的方式创建 多层分区 ; 通过文件夹把数据分开 分桶表 分桶表中的每个桶对应 hdfs 上的一个文件; 通过文件把数据分开 在查询时可以通过 where 指定分区(分桶),提高查询效率 分区表基本操作 1. 创建分区表 partitoned by 指定分区,后面加 分区字段 和 分区字段类型,可以加多个字段,前面是父路径,后面是子路径 create table student_p(id int,name string,sexex string,age int,dept string) partitioned by(part string) row format delimited fields terminated by ',' stored as textfile; 分区表相当于给 表 加了一个字段,然后给这个字段赋予不同的 value,每个 value 对应一个分区,这个 value 对应 hdfs 上文件夹的名字 2. 写入数据 1, zhangsan, f, 30, a, 2, lisi, f, 39, b, 3, wangwu, m, 26, c, 写入两次

oracle表分区二 转

与世无争的帅哥 提交于 2019-12-03 03:55:29
此文从以下几个方面来整理关于分区表的概念及操作: 1.表空间及分区表的概念 2.表分区的具体作用 3.表分区的优缺点 4.表分区的几种类型及操作方法 5.对表分区的维护性操作. (1.) 表空间及分区表的概念 表空间: 是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表, 所以称作表空间。 分区表: 当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个表空间(物理文件上),这样查询数据时,不至于每次都扫描整张表。 ( 2).表分区的具体作用 Oracle的表分区功能通过改善可管理性、性能和可用性,从而为各式应用程序带来了极大的好处。通常,分区可以使某些查询以及维护操作的性能大大提高。此外,分区还可以极大简化常见的管理任务,分区是构建千兆字节数据系统或超高可用性系统的关键工具。 分区功能能够将表、索引或索引组织表进一步细分为段,这些数据库对象的段叫做分区。每个分区有自己的名称,还可以选择自己的存储特性。从数据库管理员的角度来看,一个分区后的对象具有多个段,这些段既可进行集体管理,也可单独管理,这就使数据库管理员在管理分区后的对象时有相当大的灵活性。但是,从应用程序的角度来看,分区后的表与非分区表完全相同,使用 SQL DML

hive中的静态分区与动态分区

假装没事ソ 提交于 2019-12-03 03:51:02
hive中创建分区表没有什么复杂的分区类型(范围分区、列表分区、hash分区、混合分区等)。分区列也不是表中的一个实际的字段,而是一个或者多个伪列。意思是说在表的数据文件中实际上并不保存分区列的信息与数据。 下面的语句创建了一个简单的分区表: create table partition_test (member_id string, name string ) partitioned by ( stat_date string, province string) ROW FORMAT DELIMITED FIELDS TERMINATED BY ','; 这个例子中创建了stat_date和province两个字段作为分区列。通常情况下需要先预先创建好分区,然后才能使用该分区,例如: alter table partition_test add partition (stat_date='20110728',province='zhejiang'); 这样就创建好了一个分区。这时我们会看到hive在HDFS存储中创建了一个相应的文件夹: $ hadoop fs -ls /user/hive/warehouse/partition_test/stat_date=20110728 Found 1 items drwxr-xr-x - admin supergroup 0 2011

MySQL Sharding可扩展设计

故事扮演 提交于 2019-12-03 02:46:05
一.背景 我们知道,当数据库中的数据量越来越大时,不论是读还是写,压力都会变得越来越大。采用MySQL Replication多master多slave方案,在上层做负载均衡,虽然能够一定程度上缓解压力。但是当一张表中的数据变得非常庞大时,压力还是非常大的。试想,如果一张表中的数据量达到了千万甚至上亿级别的时候,不管是建索引,优化缓存等,都会面临巨大的性能压力。 二.定义 数据sharding,也称作数据切分,或分区。是指通过某种条件,把同一个数据库中的数据分散到多个数据库或多台机器上,以减小单台机器压力。 三.分类 数据分区根据切分规则,可以分为两类: (1)垂直分区:以表为单位,把不同的表分散到不同的数据库或主机上。特点是规则简单,实施方便,适合业务之间耦合度低的系统。 (2)水平分区:以行为单位,将同一个表中的数据按照某种条件拆分到不同的数据库或主机上。特点是相对复杂,适合单表巨大的系统。 在实际情况中,有的时候把垂直分区和水平分区结合使用。 四.示意图 下面通过几张图来给出上面三种分区方式的直观效果。 (1)垂直分区 (2)水平分区 (3)联合分区 五.注意事项 下面我们所说的分区,主要是指水平分区。 (1)在实施分区前,我们可以查看所安装版本的mysql是否支持分区: mysql> show variables like "%partition%"; 如果支持则会显示:

Redis常见问题总结

匿名 (未验证) 提交于 2019-12-03 00:43:02
【本文内容来自网络总结】 Redis是一个开源、高性能、基于键值对的缓存与存储系统。 劣势:Redis是单线程,Memcached是多线程,在多核服务器上后者的性能理论上会更高一些。 优势:随着Redis3.0的推出,标志着memcache的所有功能都已经成了Redis的子集。同时Redis对集群的支持使得Memcache原有的第三方集群工具不再成为优势。因此,在新项目中使用Redis替代Memcache将会是非常好的选择。 (1)字符串类型 (Key-Value) 使用最多的类型 (2)散列类型 (Hash) 适合存储对象 (3)列表类型 (List) (4)集合类型 (Set) (5)有序集合类型 (Zset) 内存 Remote Dictionary Server(远程数据服务) 共六种数据淘汰策略。(分三类) 一、从已设置过期的数据集 (1)volatile-lru:从已设置过期时间的数据集中,选择最近最少使用的数据淘汰 (2)volatile-ttl:从已设置过期时间的数据集中,选择将要过期的数据淘汰 (3)volatile-random:从已设置过期时间的数据集中,任意选择数据淘汰 二、从整体数据集 (4)allkeys-lru:从全数据集中,选择最近最少使用的数据淘汰 (5)allkeys-random:从全数据集中任意选择数据淘汰 三、驱逐(默认策略-直接返回错误)