Chinaunix首页 | 论坛 | 博客
  • 博客访问: 14262
  • 博文数量: 10
  • 博客积分: 210
  • 博客等级: 二等列兵
  • 技术积分: 115
  • 用 户 组: 普通用户
  • 注册时间: 2011-04-24 11:33
文章分类
文章存档

2011年(10)

我的朋友
最近访客

分类: Mysql/postgreSQL

2011-08-08 12:44:22

随着通信及互联网行业不断发展,电信级企业的市场竞争越发激烈,数据管理部门往往需要面向市场、销售、服务的不同需求,提供有针对性的数据分析支持,以定位最为精确的用户群体和和准确的行业决策。

而随着应用范围的不断扩展,企业需要收集和保存的数据量也急速上什,统计数据显示:web/Internet上的用户事件、移动广告、CDR详单等数据已成为所有数据业务中最大的增长区域,视频等多媒体流数据紧随其后。面对更为激烈的竞争,企业如何实时的抓取商业用户数据、进行高性能的统计分析,并在利用现有分析系统的前提下减少相应资金、人员投入成为了新的挑战。

clip_image001

行业背景

通常情况下,往往需要数百万美元的资金,来提高网络通信性能优化、历史数据存储的硬件和管理投入,大大增加了企业运营的负担。而市场上现有的数据库软件,对于海量数据的存储优化有限,往往需要大量的存储设备来应对。在以上背景下,Infobright针对电信级企业的实际需求推出了基于列存储的知识网格数据块,大大提高了压缩比,在实测中介于10:1到20:1之间,较同类数据产品优势明显。

此外在新近的数据仓库案例中,数据量越来越庞大,数据导入的速率极大地影响了项目部署的时间周期,造成了人力物力的浪费。Infobright新版本IEE4新功能——分布式读取进程(Distributed Load Processor),通过特有的处理机制,显著地提高导入性能;根据其官方介绍,速率可达1GB每小时,而在我们的实际测试中,通过引入多远端节点压缩,将1600G的数据成功导入目标库只耗时1小时20分钟,大大减少了项目的等待时间。下面我们通过测试实例对DLP的实现原理简要介绍。

DLP工作方式

安装一台或多台DLP实例,每个实例能够从文件或管道读取数据,数据被压缩后可以转储成一种中间文件或直接并行的传输给 Infobright服务器.服务器收到压缩的数据包,将数据加载到Infobright数据库中,然后更新知识网格.如果保存成文件形式,用户只需要运行load data infile命令将其导入Infobright数据库.

操作步骤:

1、在源数据库端安装DLP套件

2、配置远端机器的存储路径,确认连接所用的用户名密码

3、在目标数据库输入DLP指令,远端开始压缩并传输数据

clip_image003

DLP特性介绍

1.DLP允许多端多线程导入,随着源数据库数量的增加,导入速率线性增长。

2.DLP远端压缩数据,CPU的负载分布式划分到远端服务器上,并传输压缩后的数据,减少了目标机器处理数据的CPU负载。

3.在远端生成infobright知识网格数据块,压缩比在10:1到20:1之间,极大地减少了网络传输信息量。

clip_image004

4.压缩完成的数据库可直接转存为中间文件,等待目标端空闲时再使用Load data infile进行导入,避免等待。

image

5.DLP在压缩数据时会自动增加表级锁,由其生成的数据块,压缩时进行了统计和排序,较一般的导入方法具备更好的性能。

各组测试数据对比

项目

测试一

测试二

测试三

测试四

远端DLP机数

10台

10台

16台

16台

目标Infobright

1台

1台

1台

1台

原始数据总量

1600GB

1600GB

1984GB

12608GB

完成耗时

1H15m20s

1H20m06s

1H25m17s

8H30m

注:源数据为电信企业实际生产库,典型表结构大致为:总75列,20列varchar(30),5列timstamp,其余为20位数字

总结

Infobright IEE4 新功能——分布式读取进程(Distributed Load Processor),通过特有的数据压缩和传输方式,极大得提高了数据载入性能,较同类产品具有明显优势。DLP可缩短大量等待时间,加快项目实施进程,节约企业的时间和人力成本,帮助企业在核心领域塑造强大的竞争力。

使用实例

1.将二进制格式的数据转换成InfoBright格式的数据。

数据流方向 :t1.bin(file) --> dataprocessor --> t1.out(file)

使用配置文件的命令形式:

1: ./dataprocessor -i /tmp/t1.bin -o /tmp/t1.ib -D dbname -T t1

不使用配置文件命令形式:

1: ./dataprocessor -i /tmp/t1.bin -o /tmp/t1.ib -H hostip -P 5039 -L mysql -D dbname -T t1

上面的命令需要连接到InfoBright数据库获取表结构然后将二进制格式的数据转换成InfoBright的。

如果不想连接数据库直接转换那么需要先获取表结构再转换,转换过程可以是离线的。

预先从服务器获取表结构

1: ./dataprocessor -D database -T table --fetch-schema-only -s /tmp/t1.schema

然后执行转换操作

1: ./dataprocessor -i /tmp/t1.bin -o /tmp/t1.ib -s /tmp/t1.schema

当正在查询列时,使用--compress-lookups标记可以使数据传输的更小

1: ./dataprocessor -i /tmp/t1.bin -o /tmp/t1.ib -s /tmp/t1.schema --compress- lookups

注意:当使用--compress- lookups标记时,会数据库服务器的CPU开销

2.通过管道加载二进制格式的数据

数据流方向:t1.bin(pipe) --> dataprocessor --> t1.ib(file)

1: ./dataprocessor -s ./t1.schema -I pipe-create -i /tmp/t1in.pipe -o /tmp/t1.ib 建立数据加载管道 2: cat /tmp/t1.bin > /tmp/t1in.pipe 发送数据到管道

3.二进制数据通过管道由dataprocessor处理后输出给mysql客户端再导入表中。

数据流方向:

t1in.pipe --> dataprocessor --> t1out.pipe --> mysql load --> table t1

1: ./dataprocessor -s ./t1.schema -I pipe-create -i /tmp/t1in.pipe -O pipe-create -o /tmp/t1out.pipe 2: cat /tmp/00.bin > /tmp/t1in.pipe 运行mysql客户端运行下列命令 3: use dbname; 4: set @bh_dataformat='INFOBRIGHT'; 5: load data local infile '/tmp/t1out.pipe' into table t1; 使用-X参数可以使用-O pipe-create -o /tmp/tlout.pipe通过mysql客户端直接加载。 处理过程是t1in.pipe --> dataprocessor -X --> table t1
阅读(681) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~