oracle表分区--亿级的数据在oracle表中存储,表分区的一个真实应用场景

我从来没有操作处理过如此大量的真实数据。


我的一个任务,通过kafka流式处理消息框架 消费 整个城市 其中一种手机网络的信号接入信息。

千万级人口,只要有人使用手机网络,就会产生一条数据,可想而知,这个生产数据的效率和数据量有多大。。。


好吧,以前没做过,刚接触。我拿到那些不停生产出来的数据,经过业务处理,在批量插入到oracle中去,程序部署后跑起来,我还是蛮开心的,不过看着日志文件的大小猛涨,

还有服务器硬盘资源被慢慢吃掉,还是挺害怕的。


我是昨天中午左右部署了程序,开始运行的,过了一夜,第二天到公司,因为心里记挂着,一来到公司立马进服务器查看程序运行状况,乖乖,服务器磁盘use 100%


日志文件也大的离谱,再一看oracle,尼玛,昨天看的是几百万的数据,现在数了数,近3亿条数据,懵逼了。


因为这个功能我刚做好,自己上线跑起来测试下,问了同事,原来我在入库的时候,操作并不全面,其中就有一个重要的分区字段,听了之后差不多理解了,自己也看了些资料。


业务场景是这样的,我们存储着全市的手机信号接入数据,而这些数据量非常大,而且只是短时有用,所以流程上的设计是,存储表做分区,因为产生数据太快,就设计了按时间去分区,5分钟一个分区,共有36个分区,也就是180分钟,然后定时任务删除当前分区的上一个分区数据内容,36个分区共计三个小时,此时可以将表看做是一个圆盘,上面平均分布了36个数据盒子,每过5分钟就指向下一个分区盒子,一圈跑完就是3个小时,我的程序会过滤数据,只去处理距当前时间最近2小时之间的数据,也就是说我不停的去入库,但是始终只有最新的2小时数据,而表可以存放最新的3小时数据,insert程序跟delete程序都是独立运行的,insert只管插入,只是在插入的时候安分区去操作,而delete程序设计的是5分钟执行一次,同样会计算出指向的分区,然后去删除当前分区相隔十个分区的最近分区,这样,36个分区其实一直都是24个分区在使用,循环轮流的操作,这样也避免了刚插入的数据还没有被处理完就被删除的情况,有一个小时的间歇期,也就是说我们一直循环存储着最新的2个小时的数据,对,是这样的,数据被应用后就可以删除了,数据量就可以得到控制。


一个公式 zone=((real_time 小时换算成分钟数+分钟数)%180)/5+1,这样可以得到处理当前消息应该放在哪个分区中,既然明确了分区,定时任务按区的删除数据就可生效。这只是一个简单的分区应用,表分区对查询等很多操作都有很好的性能提高


我猜想他们是使用列表分区

该分区的特点是某列的值只有几个,基于这样的特点我们可以采用列表分区。
例一

CREATE TABLE PROBLEM_TICKETS
(
PROBLEM_ID NUMBER(7) NOT NULL PRIMARY KEY,
DESCRIPTION VARCHAR2(2000),
CUSTOMER_ID NUMBER(7) NOT NULL,
DATE_ENTERED DATE NOT NULL,
STATUS VARCHAR2(20)
)

PARTITION BY LIST (STATUS)
(
PARTITION PROB_ACTIVE VALUES ('ACTIVE') TABLESPACE PROB_TS01,
PARTITION PROB_INACTIVE VALUES ('INACTIVE') TABLESPACE PROB_TS02)

(1) 表空间及分区表的概念
表空间:
  是一个或多个数据文件的集合,所有的数据对象都存放在指定的表空间中,但主要存放的是表, 所以称作表空间。
分区表:
当表中的数据量不断增大,查询数据的速度就会变慢,应用程序的性能就会下降,这时就应该考虑对表进行分区。表进行分区后,逻辑上表仍然是一张完整的表,只是将表中的数据在物理上存放到多个“表空间”(物理文件上),这样查询数据时,不至于每次都扫描整张表而只是从当前的分区查到所要的数据大大提高了数据查询的速度。

(2).表分区的具体作用
Oracle的表分区功能通过改善可管理性、性能和可用性,从而为各式应用程序带来了极大的好处。通常,分区可以使某些查询以及维护操作的性能大大提高。此外,分区还可以极大简化常见的管理任务,分区是构建千兆字节数据系统或超高可用性系统的关键工具。 分区功能能够将表、索引或索引组织表进一步细分为段,这些数据库对象的段叫做分区。每个分区有自己的名称,还可以选择自己的存储特性。从数据库管理员的角度来看,一个分区后的对象具有多个段,这些段既可进行集体管理,也可单独管理,这就使数据库管理员在管理分区后的对象时有相当大的灵活性。但是,从应用程序的角度来看,分区后的表与非分区表完全相同,使用 SQL DML 命令访问分区后的表时,无需任何修改。
什么时候使用分区表:
1、表的大小超过2GB。
2、表中包含历史数据,新的数据被增加到新的分区中。

(3).表分区的优缺点
表分区有以下优点:
1、改善查询性能:对分区对象的查询可以仅搜索自己关心的分区,提高检索速度。
2、增强可用性:如果表的某个分区出现故障,表在其他分区的数据仍然可用;
3、维护方便:如果表的某个分区出现故障,需要修复数据,只修复该分区即可;
4、均衡I/O:可以把不同的分区映射到不同磁盘以平衡I/O,改善整个系统性能。
缺点:
分区表相关:已经存在的表没有方法可以直接转化为分区表。不过 Oracle 提供了在线重定义表的功能。

  • 4
    点赞
  • 15
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值