地市级电信历史话单备份查询方案

  目前国内各电信运营商的计费系统基本都实现了省级集中,电信用户可以查询最近几个月的话费详单,但由于数据量过于庞大,各省运营商一般不再提供更早的话单查询服务,只是由各地市公司自行备份数据,自行处理。如果用户需要查询更早的话单记录,欠费催缴人员需要查询欠费用户多年以前的历史话单作为催缴凭据,以及其他一些类似的需要,怎么办?这是摆在各地市">电信公司面前的一个问题。

  背景分析

  在地市级电信公司,历史话单数据有以下一些特性,也可以说是实现备份查询方案的关键点。

  较快的数据增长速度:随着用户数和业务的扩展,话单数据容量呈几何级数增长,一般业务增长较快的地市公司,如果不压缩的话,最近几年的话单数据都有上百GB的容量。

  静态数据:历史话单数据从计费系统落单后,除非出现重大变故,一般不易发生变化。用大型关系数据库存储这种数据略显浪费,而且数据库空间有限,不可能无限存储所有历史数据。

  查询用户单一和不确定性:个别用户可能由于特殊的原因,需要查询自己很早以前的话单记录,或者是欠费催缴人员,需要查询某个欠费用户多年以前的历史话单作为催缴凭据,等等。

  查询响应要求一般:用户对查询的响应速度要求不高,只要有数据就行,不会在乎等待十分钟还是一天。

  5.查询时间范围跨度长:一般如果用户要查询自己的历史话单,时间跨度都会要求尽可能大,有可能要查自己从开户以来所有话单记录。图1是某地市电信公司某年的用户查询历史话单次数的分布统计,可以看出有两个台阶,查询半年前到一年半前的次数较多,查询一年半前到三年半前的次数次之,超过三年半的则趋近于零。

  图1 某地市电信公司某年的用户查询历史话单次数的分布图

  方案设计

  方案概述

  针对历史话单的上述特性,笔者提出了实现历史话单备份查询的基本思路。采用VisualFoxpro软件编程,将话单数据分月分号段存成一个个的dbf文件,并用压缩软件压缩,以硬盘和光盘存储压缩文件,在索引表中记录每个压缩文件的物理存放位置,实现最近两年数据从硬盘快速检索、两年以上数据从光盘海量检索的功能。

  备份方法

  将关系数据库的话单记录按月按万号段进行存储,如“13912340000~13912349999”就是一个万号段,先将该号段的数据存成一个dbf文件,文件名形如“1391234_YYYYMM.dbf”,并以gzip压缩,生成“1391234_YYYYMM.dbf.gz”,相同月份的文件都存放在目录名为当月“YYYYMM”的子目录内。

  之所以按这种方式存储数据,是因为历史话单查询应用一般只查某个号码在某两个月份之间的数据。文件压缩可以节省磁盘空间,按月和按号段存储相当于数据库的分区操作,而且分区相对合适,压缩文件的字节量在几十MB到几百MB之间,相对一个上GB的大文件,可以节省不少文件拷贝、解压缩等操作的开销。随着用户数据量的增长,某些号段可能需要采用千号段甚至百号段的规模来形成压缩文件,这样可以将压缩文件的字节量控制在较小的区间内。另外由于话单数据过于庞大,单日数据另存为dbf就可能超过2GB,超出VisualFoxpro软件的处理极限,此时必须在关系数据库中将话单表按号段分区存储,再按分区导成dbf,即避免文件容量问题,又提高了导出速度。

  在关系数据库中创建索引日志表,记录各月各号段压缩文件的相关信息,包括月份、文件名、起始号码、截止号码、存放路径、光盘标签,用于快速检索某个号码某月数据的存放路径或光盘标签。

  查询方法

  在关系数据库中创建查询日志表,用于记录每次查询的日志,包括号码、话单起始时间、话单截止时间、查询者、查询时间(如图2所示)。将光盘盘符作为一个预设参数,用于查询光盘数据。查询时以查询起始时间开始,依次检索当月历史话单压缩文件的存放位置和备份光盘的标签,如果文件不在本机硬盘,则提示插入相应标签的光盘到预设光驱盘符,在介质上找到文件后,将文件拷到临时目录,再解压缩,查询到记录后,追加另存到一个目标文件,如此反复直到循环结束,最后记录查询日志,并提交目标文件。查询单个号码历史数据的流程图如下。

  图2 在关系数据库中查询单个号码历史数据的流程图

  此备份查询方案针对历史话单特性,使用较少的投入,即可以较快地速度检索某个用户号码在任意时间段的话单记录,将各月话单数据一次性按号段压缩备份,平时只要避免介质损坏,备份文件就可以长期多次使用,从而实现了超长年限历史话单的快速查询。

时间: 2024-10-10 13:10:19

地市级电信历史话单备份查询方案的相关文章

中小型数据库 RMAN CATALOG 备份恢复方案(二)

      中小型数据库呈现的是数据库并发少,数据库容量小,版本功能受限以及N多单实例等特点.尽管如此,数据库的损失程度也会存在零丢失的情形.企业不愿意花太多的钱又要保证数据库的可靠稳定,可是苦煞了我这些搞DB的.接上一篇文章,中小型数据库 RMAN CATALOG 备份恢复方案(一),我们继续来给出基于中小型数据库的恢复的脚本与其部署.   1.RMAN还原shell脚本 --下面的shell脚本用于实现数据库的自动还原,还原成功后,数据库被关闭.因为我们在Prod数据库无异常的情形下,不需要

中小型数据库 RMAN CATALOG 备份恢复方案(三)

      在前两篇文章中描述了中小型数据库使用RMAN catalog设计备份与恢复方案,并给出了所有相关的脚本来从某种车程度上模拟Oracle Data Guard以减少硬件故障带来Prod服务器上数据库损失.在这边文章中主要描述Prod数据库的变迁在Bak server端如何进行恢复.           中小型数据库 RMAN CATALOG 备份恢复方案(一)          中小型数据库 RMAN CATALOG 备份恢复方案(二)   1.恢复前提     按照前两篇文章的描述,

基于云上分布式NoSQL的海量气象数据存储和查询方案

前言 气象数据是一类典型的大数据,具有数据量大.时效性高.数据种类丰富等特点.气象数据中大量的数据是时空数据,记录了时间和空间范围内各个点的各个物理量的观测量或者模拟量,每天产生的数据量常在几十TB到上百TB的规模,且在爆发性增长.如何存储和高效的查询这些气象数据越来越成为一个难题. 传统的方案常常采用关系型数据库加文件系统的方式实现这类气象数据的存储和实时查询,这种方案在可扩展性.可维护性和性能上都有一些缺陷,随着数据规模的增大缺点越来越明显.最近几年,学界和业界开始不约而同的转向利用分布式N

用SQL进行单表查询

  单表查询是相对多表查询而言的,指从一个数据表中查询数据.4.2.1 查询所有的记录    在[命令编辑区]执行输入"select * from scott.emp",然后单击[执行]按钮,出现如图4.3所示的emp数据表所有记录.    [参见光盘文件]:\第4章\4.2\421.sql.    select * from 数据表,这里的"*"代表数据表中所有的字段.4.2.2 查询所有记录的某些字段    在[命令编辑区]输入"select empn

python实现简易数据库(二) 单表查询和top N实现

上一篇中,介绍了我们的存储和索引建立过程,这篇将介绍SQL查询.单表查询和TOPN实现. 一.SQL解析 正规的sql解析是用语法分析器,但是我找了好久,只知道可以用YACC.BISON等,sqlite使用的lemon,捣整了一天没实现,就用了python的正则表达式. 1.删除无用的空格.跳格符.换行符等: 我们以分号';'作为一个sql语句的结束符,在输入分号之前,我们将输入的sql语句串接成一个string,在将整个sql语句的一些无用的字符删掉, 1 def rmNoUseChar(sq

实现Oracle异地数据自动备份的方案

在大型商业应用中,数据的异地容灾备份十分重要,也必不可少.笔者根据自己的实践经验,设计了一套简洁地实现异地数据自动备份的方案,可供数据库管理人员参考.文中所有的程序都经过测试,运行良好.这里模拟的异地运行环境为一主一备两套Sun Solaris系统,所采用的备份方法为Oracle数据库提供的标准备份:export. 相关命令 文中主要用到三个命令,这里先单独介绍一下: export: 将数据库中数据备份成一个二进制系统文件,它有三种模式: 用户模式.表模式.整个数据库模式.还可分为三种备份类型:

求一条sql语句,单表查询的

问题描述 求一条sql语句,单表查询的 表结构 (姓名,课程,成绩) 现在求获的该表总成绩最高学员的名字 解决方案 mysql 数据库select sum(成绩) as t from table group by 姓名 order by t limit 0,1 oracle数据库 select * from (select sum(成绩) as t from table group by 姓名 order by t) WHERE ROWNUM<=1 sqlserver数据库 select top

中小型数据库 RMAN CATALOG 备份恢复方案(一)

        对于数据库的稳定性,高可用,跨平台以及海量数据库的处理,Oracle 数据库通常是大型数据库和大企业的首选.尽管如此,仍然不乏很多中小企业想要品尝一下Oracle腥味,因此在Oracle环境中也有不少中小型数据库.出于成本的考虑,通常有可能就搞个标准版了,跑在Linux上.谁叫Oracle太贵呢?对于中小企业而言,选择合理的才是最好的.对我们这些个搞DB的,贵的一定有贵的道理,我们也可以都进多几斗米.哈哈......典型的打工者的心态哟.言归正传,中小企业的成本限制了我们搞高可用

php快递单号查询接口使用示例_php实例

通过本接口可以查询圆通快递.申通快递.ems快递.韵达快递等快递单号查询信息,无需其他额外开发,非常方便首先到www.aikuaidi.cn上注册个账号,使用key! 复制代码 代码如下: <?php/** * 查询物流信息 */define('IN_ECS', true); require(dirname(__FILE__) . '/includes/init.php'); if ($id = intval($_REQUEST['id'])) {    $sql_select = 'SELEC