物化视图


主要就是一些存储过程的执行:

一、配置环境需求
1、mysql5.1+、mysql5.5,binlog_format为行日志
(1)设置binlog_format:在https://www.360docs.net/doc/0518557355.html,f 更换参数binlog_format=ROW,需要重启mysql服务
(2)如果此数据库服务为mysql主从复制的slave(从)服务器,则需设置log-slave-updates= 1,让从记录自己日志,设置方法:在https://www.360docs.net/doc/0518557355.html,f中添加log-slave-updates= 1,需 要重启mysql服务
(3)mysql所需安装的包如下:
MySQL-devel
MySQL-shared-compat
MySQL-shared
MySQL-server
MySQL-client
(4)启用mysql事件
设置方法:连接mysql后执行SET GLOBAL event_scheduler = ON;
或者在https://www.360docs.net/doc/0518557355.html,f中加入 event_scheduler = 1,重启数据库服务
2、由于flexviews为php脚本,需要安装php环境,
(1)版本:php 5.2+
(2)安装所需的php环境包,rpm包如下:
php-pdo-5.2.6-3.rhel5
php-mysqli-5.2.6-3.rhel5
php-cli-5.2.6-3.rhel5
php-common-5.2.6-3.rhel5
php-mysql-5.2.6-3.rhel5(php连接mysql包,不装会包连接数据库错误)
(3)go-pear.phar包
二、安装步骤(前提为mysql已经安装完成)
1、安装PHP
rpm -ivh php*****
安装以上环境中说的那几个php包
2、安装pear(the PHP Extension and Application Repository)——PHP扩展与应cd /用库
php安装成功后执行
php go-pear.phar
出现选项时,一路回车。
如以上个步骤有错误时,根据错误查找原因
3、因flexviews为下载的为已经编译好的二进制包,无需安装,解压即可
解压flexview
tar -xzf flexview*****
4、修改flexview
因现在数据库编码全部采用中文gbk编码,所以在安装flexview(建表和建存储过程)时,必须修改其中使用的编码
(1)、修改flexviews/procs和flexviews/schema下的sql文件的建表或者建存储过程的默认编码修改为gbk统一编码
(2)、在/consumer/include/flexcdc.php中增加:$this->characterset = mysql_query("set names gbk;");
位置在连接mysql_connect之后:
$this->source = mysql_connect($S['host'] . ':' . $S['port'], $S['user'], $S['password'], true) or die1('Could not connect to MySQL server:' . mysql_error());
$this->dest = mysql_connect($D['host'] . ':' . $D['port'], $D['user'], $D['password'], true) or die1('Could not connect to MySQL server:' . mysql_error());
$this->characterset = mysql_query("set names gbk;");/***************此处为添加的语句***************************/
$this->settings = $settings;
5、在mysql上建立flexviews所用数据库(一般为默认,可以通过修改源文件进行修改)、表、存储过程
(1)、建数据库和表,解压flexview*****后,

执行:cd flexview*****/consumer/——定位到consumer
执行:php setup_flexcdc.php 出现下面
setup starting
setup completed
即安装成功:此处为建立flexview库和三张flexview的基础表,可查看数据库是否存在
(2)、修改flexviews配置文件
# vim flexview*****/consumer/consumer.ini
(3)、建存储过程
执行完php setup_flexcdc.php后返回到flexview主目录 cd ..
导入存储过程:执行:mysql -uxxx -pxxx -e'source install.sql;';没有错误继续
退出数据库:定位到procs/ cd procs/
导入另外两个存储过程:执行:mysql -uxxx -pxxx -e'source get_trigger_body.sql;'和mysql -uxxx -pxxx -e'source get_mvlog.sql;',没有错误继续
(4)、以上无错误,到此flexview安装完毕
三、在实际应用数据库上添加物化视图
1、出省站表
call flexviews.create_mvlog('sxcoalts', 'glzk_cr_cs');//指定要建的数据库和表名
call flexviews.create('sxcoalts', 'mv_glzk_cr_cs', 'INCREMENTAL');//创建物化视图名称,采用增量刷新
call flexviews.add_table(flexviews.get_id('sxcoalts','mv_glzk_cr_cs'), 'sxcoalts', 'glzk_cr_cs', 'glzk', NULL); //添加物化视图涉及的表,用在where语句中,可增加多个表,需要指明条件
call flexviews.add_expr(flexviews.get_id('sxcoalts','mv_glzk_cr_cs'), 'sum', 'glzk.KF', 'kf'); //添加物化视图字段,可为sum(),group(),count()或者单独的实际的数据列等
call flexviews.add_expr(flexviews.get_id('sxcoalts','mv_glzk_cr_cs'), 'sum', 'glzk.JZ', 'jz'); //继续添加物化视图字段
call flexviews.add_expr(flexviews.get_id('sxcoalts','mv_glzk_cr_cs'), 'group', 'cszbh', 'area_code'); //继续添加物化视图字段
call flexviews.add_expr(flexviews.get_id('sxcoalts','mv_glzk_cr_cs'), 'group', 'PM', 'pm'); //继续添加物化视图字段
call flexviews.add_expr(flexviews.get_id('sxcoalts','mv_glzk_cr_cs'), 'group', 'PJLX', 'pjlx'); //继续添加物化视图字段
call flexviews.add_expr(flexviews.get_id('sxcoalts','mv_glzk_cr_cs'), 'group', 'ZF', 'zf'); //继续添加物化视图字段
call flexviews.add_expr(flexviews.get_id('sxcoalts','mv_glzk_cr_cs'), 'group', 'year(glzk.RQ)', 'year'); //继续添加物化视图字段
call flexviews.add_expr(flexviews.get_id('sxcoalts','mv_glzk_cr_cs'), 'group', 'month(glzk.RQ)', 'month'); //继续添加物化视图字段
call flexviews.add_expr(flexviews.get_id('sxcoalts','mv_glzk_cr_cs'), 'group', 'glzk.RQ', 'date'); //继续添加物化视图字段
call flexviews.enable(flexviews.get_id('sxcoalts','mv_glzk_cr_cs')); //建立物化视图,
call flexviews.refresh(flexviews.get_id('sxcoalts','mv_glzk_cr_cs'), 'BOTH', NULL);//刷新增量数据,(如有错,或长时间没有反应说明配置失败)
2、按

月统计绑定磅单表
call flexviews.create_mvlog('sxcoalts', 'weight_record');
call flexviews.create('sxcoalts', 'mv_wr_by_notification_year_month', 'INCREMENTAL');
call flexviews.add_table(flexviews.get_id('sxcoalts','mv_wr_by_notification_year_month'), 'sxcoalts', 'weight_record', 'w', NULL);
call flexviews.add_expr(flexviews.get_id('sxcoalts','mv_wr_by_notification_year_month'), 'column', 'business_station', 'business_station');
call flexviews.add_expr(flexviews.get_id('sxcoalts','mv_wr_by_notification_year_month'), 'column', 'area_code', 'area_code');
call flexviews.add_expr(flexviews.get_id('sxcoalts','mv_wr_by_notification_year_month'), 'sum', 'amount_callback', 'sum_amount');
call flexviews.add_expr(flexviews.get_id('sxcoalts','mv_wr_by_notification_year_month'), 'group', 'notification_no', 'notification_no');
call flexviews.add_expr(flexviews.get_id('sxcoalts','mv_wr_by_notification_year_month'), 'group', 'bill_year', 'bill_year');
call flexviews.add_expr(flexviews.get_id('sxcoalts','mv_wr_by_notification_year_month'), 'group', 'month(weight_date)', 'bill_month');
call flexviews.add_expr(flexviews.get_id('sxcoalts','mv_wr_by_notification_year_month'), 'group', 'status', 'status');
call flexviews.enable(flexviews.get_id('sxcoalts','mv_wr_by_notification_year_month'));
call flexviews.refresh(flexviews.get_id('sxcoalts','mv_wr_by_notification_year_month'), 'BOTH', NULL);
3、按天统计绑定磅单表
call flexviews.create_mvlog('sxcoalts', 'weight_record');
call flexviews.create('sxcoalts', 'mv_wr_by_notification_year_month_day', 'INCREMENTAL');
call flexviews.add_table(flexviews.get_id('sxcoalts','mv_wr_by_notification_year_month_day'), 'sxcoalts', 'weight_record', 'w', NULL);
call flexviews.add_expr(flexviews.get_id('sxcoalts','mv_wr_by_notification_year_month_day'), 'column', 'business_station', 'business_station');
call flexviews.add_expr(flexviews.get_id('sxcoalts','mv_wr_by_notification_year_month_day'), 'column', 'area_code', 'area_code');
call flexviews.add_expr(flexviews.get_id('sxcoalts','mv_wr_by_notification_year_month_day'), 'sum', 'amount_callback', 'sum_amount');
call flexviews.add_expr(flexviews.get_id('sxcoalts','mv_wr_by_notification_year_month_day'), 'group', 'notification_no', 'notification_no');
call flexviews.add_expr(flexviews.get_id('sxcoalts','mv_wr_by_notification_year_month_day'), 'group', 'sale_plan_no', 'sale_plan_no');
call flexviews.add_expr(flexviews.get_id('sxcoalts','mv_wr_by_notification_year_month_day'), 'group', 'date(weight_date)', 'bill_date');
call flexviews.add_expr(flexviews.get_id('sxcoalts','mv_wr_by_notification_year_month_day'), 'group', 'status', 'status');
call flexviews.add_expr(flexviews.get_id('sxcoalts','mv_wr_by_notification_year_month_day'), 'group', 'bill_type', 'bill_type');
call flexviews.enable(flexviews.get_id('sxcoalts','mv_wr_by_notification_year_month_day'));
call flexviews.refresh(flexviews.get_id('sxco

alts','mv_wr_by_notification_year_month_day'), 'BOTH', NULL);
四、部署
1、运行flexview
执行:php /flexview/consumer/run_consumer.php
或者 因为服务器环境,所以采用服务的方cd /..式运行
创建flexview服务,脚本在目录中
2、添加定时刷新事件(此处采用每15分钟刷新)
CREATE EVENT `e_mv_wr_year_month_day` ON SCHEDULE EVERY 900 SECOND STARTS '2012-11-27 17:10:00' ON COMPLETION NOT PRESERVE ENABLE DO call flexviews.refresh(flexviews.get_id('sxcoalts','mv_wr_by_notification_year_month_day'), 'BOTH', NULL);
CREATE EVENT `e_mv_wr_year_month` ON SCHEDULE EVERY 900 SECOND STARTS '2012-11-27 17:10:00' ON COMPLETION NOT PRESERVE ENABLE DO call flexviews.refresh(flexviews.get_id('sxcoalts','mv_wr_by_notification_year_month'), 'BOTH', NULL);
CREATE EVENT `e_mv_glzk` ON SCHEDULE EVERY 900 SECOND STARTS '2012-11-27 17:10:00' ON COMPLETION NOT PRESERVE ENABLE DO call flexviews.refresh(flexviews.get_id('sxcoalts','mv_glzk_cr_cs'), 'BOTH', NULL);
五、其他
1、全部刷新例子
//全部
call flexviews.create('test', 'mv_bloc', 'COMPLETE');
call flexviews.set_definition(flexviews.get_id('test','mv_bloc'), 'SELECT count(*) from test.bloc; ');
call flexviews.enable(flexviews.get_id('test','mv_bloc')); //需在命令行下执行
2、建立多表关联视图例子
//多表关联
call flexviews.create('test', 'mv_ab_inc', 'INCREMENTAL') ;
call flexviews.create_mvlog('test', 'a');
call flexviews.create_mvlog('test', 'b');
call flexviews.add_table(flexviews.get_id('test','mv_ab_inc'), 'test', 'a', 'a', NULL);
call flexviews.add_table(flexviews.get_id('test','mv_ab_inc'), 'test', 'b', 'b', 'on a.id=b.a_id');// 'on a.id=b.a_id' 里面可以增加 and 条件。
call flexviews.add_expr(flexviews.get_id('test','mv_ab_inc'), 'sum', 'a_id', 'pk');
call flexviews.enable(flexviews.get_id('test','mv_ab_inc'));
call flexviews.refresh(flexviews.get_id('test','mv_ab_inc'), 'BOTH', NULL)
六、问题:
https://www.360docs.net/doc/0518557355.html,f中的一些参数设置可能会影响最后的刷新、目前尚不知道是哪个参数,所以建议采用已经复制已经安装好的机器的https://www.360docs.net/doc/0518557355.html,f

七、处理问题
先停止同步——disable——enable



相关文档
最新文档