使用SymmetricDS软件同步CIMISS核心库数据

2020-03-18 07:55李从英金石声
中低纬山地气象 2020年1期
关键词:触发器启动部署

李从英,金石声,王 彪,郭 茜,李 波

(贵州省气象信息中心,贵州 贵阳 550002)

0 引言

目前我们为气象部门内部业务提供数据服务的全国综合气象信息共享平台(简称CIMISS)一直是稳定运行的,满足了各个单位实际业务和科研[2]需求。但是其他行业的用户以及公众用户对气象数据的检索需求目前仍然没有满足。很多行业都与气象息息相关[3],都需要定制气象数据服务。但是由于网络等原因限制,他们不能访问我们内部数据服务接口,只能通过特定数据库服务接口获取数据。虽然我们设计了专门为其他行业用户提供数据服务的行业区数据库UDB和对公众用户提供气象数据服务的INT区数据库IDB(以下分别简称行业库和INT库),但是由于CIMISS的数据加工处理系统并没有写入到行业库和INT库,CIMISS系统运行以来,行业库和INT库一直处于加电空转状态,造成了极大的浪费,没有满足其他行业用户和公众用户对气象数据的需求,没有发挥其应有的社会效益,所以充分利用这两个数据库,并对行业及公众用户提供实时数据、满足用户对气象数据的需求尤为迫切。

本文通过SymmetricDS软件将CIMISS核心库中的气象数据实时同步到行业库和INT库,然后通过接口为用户提供数据,以满足客户需求。

1 软件部署

在尽量不增加数据加工处理系统负担的前提下,考虑使用数据库同步技术解决上述问题。考虑到数据库系统处于7×24 h运行,对软件的稳定性要求很高,并权衡了商业软件的巨额费用需求和实现的具体业务场景(一对多的数据同步),我们决定采用开源的数据库同步软件SymmetricDS。具体业务逻辑如图1。整个系统部署两套SymmetricDS软件,一套位于APP01服务器上负责监视核心区数据库(begy_bdb)上指定数据表的变化。一套位于APP02服务器上负责接收数据。

图1 数据同步逻辑Fig.1 The logic of data synchronization

SymmetriDS软件可以在网上下载symmetric-server-3.8.7.zip[4],然后直接解压缩即可。由于该软件是基于JAVA环境开发的,可以部署在任意平台上,目前在windows和linux上都测试正常。SymmetricDS的部署极为简单,将压缩包解压到指定文件夹下即可。

我们选择分别在两台接口服务器APP01和APP02的api用户环境下部署两套SymmetricDS。服务器APP01上的SymmetricDS为服务节点,负责抓取核心库指定表的数据变化,这些变化主要包括插入、删除、更新,然后将变化的数据批量推送到服务器APP02上,APP02作为子节点接收推送的批量数据,并负责将这些数据同步到行业区以及INT区数据库上。

1.1 部署服务节点

服务器APP01上部署一套SymmetricDS作为服务节点,负责管理核心区数据库。因为SymmetricDS启动时会读取部署的engines文件夹下的配置文件,并将若干个参数读取并写入数据库。部署后的samples文件夹下存放了若干个配置样例以提供参考,我们需要拷贝样例文件夹samples下的corp-000.properties配置文件到engines目录下并修改文件名为:bdb.properties,并根据实际情况对bdb.properties的配置进行修改。

1.2 部署子节点

服务器APP02上部署一套SymmetricDS软件[5],负责接收APP01推送的批量数据,并负责将这些数据同步到INT区数据库IDB和行业区数据库UDB。需要到文件夹samples目录下拷贝2份样例corp-000.properties 到engines目录下并修改文件名为:xdb-001.properties(负责INT区数据库)和xdb-002.properties(负责行业区数据库),并根据实际情况修改配置(这里取名叫xdb是因为它同时负责INT区和行业区两个数据库的同步)。

1.3 数据库配置

在服务器上配置完必要的信息后,需要在核心区数据库中几张特定的数据表里对具体的业务逻辑进行配置。这个步骤只需要在服务节点配置即可,系统运行后子节点注册到服务节点,之后也会相互同步这些信息。

1.3.1 系统表的安装 系统在服务节点运行时需要一些表。这些表的安装只需在/bin目录下执行以下命令即可:./symadmin --engine bdb-000 create-sym-table。子节点不需要安装,待子节点启动并注册到服务节点后会自动安装。

这样就在核心区数据库下安装了46张以“sym_”开头的表。其中一些是进行业务逻辑配置使用的,需要后续进行配置;一些是系统运行时需要的,在系统启动后从配置文件中读取的,例如sym_node数据表记录了系统的节点信息。具体可以查看user-guide文档的Appendix A: Data Model部分。另外,系统在/bin目录下有很多可执行的命令,相关的帮助可以参看user-guide文档,同时也可以使用以下命令查看帮助信息:./symadmin-help。

1.3.2 具体业务的数据库配置 建立分组:(这一步在启动系统时读取配置文件自动完成)服务节点启动后读取配置文件中的信息,将配置文件中关于组名和扩展名等信息写入数据库中,子节点启动后会注册到服务节点上,然后节点间会交换、同步信息。

下面以同步核心库的“中国地面逐小时要素资料”、“中国地面分钟降水资料”这两类数据为例,介绍实时同步数据的具体数据库配置。以下定义都是在核心库数据表中进行。

①定义channel

insert into sym_channel (channel_id, processing_order, max_batch_size, enabled, description)values(′SURF_WEA_CHN_MUL_HOR′,1,100000,1,′SURF_HOUR_DATA FROM BDB TO XDB′);

insert into sym_channel (channel_id, processing_order, max_batch_size, enabled, description)values(′SURF_WEA_CHN_PRE_MIN′,10,100000,1,′SURF_PRE_MIN_DATA FROM BDB TO XDB′);

考虑到分钟表的数据量很大,所以这里定义了两个channel,分别用来同步小时表和分钟表数据。channel_id是定义的通道名称,max_batch_size指定此channel中的一个batch中可以处理的数据变化事件的最大值。

②定义trigger

insert into sym_trigger (trigger_id,source_table_name,channel_id,last_update_time,create_time) values (′SURF_WEA_CHN_MUL_HOR_TRIGGER′,′SURF_WEA_CHN_MUL_HOR_TAB′,′SURF_WEA_CHN_MUL_HOR′,current_timestamp,current_timestamp);

insert into sym_trigger (trigger_id,source_table_name,channel_id,last_update_time,create_time) values (′SURF_WEA_CHN_PRE_MIN_TRIGGER′,′SURF_WEA_CHN_PRE_MIN_TAB′,′SURF_WEA_CHN_PIN′,current_timestamp,current_timestamp);

这里定义了2个触发器分别用来捕获小时表和分钟表的数据变化,触发器关联了上面定义的channel。若考虑按照经纬度范围对分钟表的数据变化进行过滤,需要修改触发器定义,为触发器添加限制条件。可以用如下命令分别为分钟表的INSERT、UPDATE、DELETE 3个触发器添加限制条件,例如UPDATE限制条件:UPDATE SYM_TRIGGER SET SYNC_ON_INSERT_CONDITION=′:new."V05001">=24.37 and:new."V05001"<=29.13) and:new."V06001">=103.36and:new."V06001">=109.37)′ WHERE TRIGGER_ID=′SURF_WEA_CHN_PRE_MIN_TRIGGER′。其中trigger_id表示触发器名称,source_table_name表示要同步的数据表的表名。在添加限制条件后,分钟表每小时同步的数据量由近90万条下降到20万条。

③定义node_group_link

insert into sym_node_group_link (source_node_group_id, target_node_group_id, data_event_action) values (′bdb′, ′xdb′, ′P′);

该语句指定数据同步的源和目的,即从bdb同步到xdb,以及数据同步方式‘P’,即通过推送的方式进行传输,P表明数据源节点将通过HTTP PUT请求初始化通信。

④定义router

insert into sym_router (router_id,source_node_group_id,target_node_group_id,router_type,create_time,last_update_time)values(′BDB_2_XDB′, ′bdb′, ′xdb′, ′default′,current_timestamp, current_timestamp);

router指定了组间的数据传递关系,其中source_node_group_id和target_node_group_id的值必须和第3步node_group_link中的进行对应。Trigger和Router是多对多的关系。这意味着,一个触发器可以捕获数据变化,然后路由这些变化到多个位置,也意味着一个Router可以与多个不同的触发器相联系。

⑤定义trigger_router

Insert into sym_trigger_router (trigger_id,router_id,initial_load_order,last_update_time,create_time)values(′SURF_WEA_CHN_MUL_HOR_TRIGGER′,′BDB_2_XDB′, -1, current_timestamp, current_timestamp);

这里同样需要定义了2个trigger_router分别用来处理小时表和分钟表,分钟表的trigger_rouer和小时表的类似。trigger_router是将trigger和router进行关联,它们之间是多对多的关系。

2 同步数据及清理数据

在做好以上数据库配置工作后,即可依次启动SymmetricDS服务节点和SymmetricDS子节点。

2.1 启动SymmetricDS服务节点

2.1.1 在bdb-000上启动SymmetricDS 在bin目录下运行启动命令以启动SymmetricDS:./sym --engine bdb-000 --port 31415。若要在后台启动则运行以下命令:nohup ./sym --engine bdb-000 --port 31415 &。

2.1.2 开启注册(该步骤启动一次即可,以后重启服务不需要再次运行):

./ symadmin --engine bdb-000 open-registration xdb 001

./ symadmin --engine bdb-000 open-registration xdb 002

如果服务需要重启,则删掉sym进程再次运行启动命令即可。

2.2 启动SymmetricDS子节点

在bin目录下执行以下命令:./sym--port 31415,即可将该组的两个节点同时启动。重启命令类似于服务节点。如果需要在后台启动,则使用如下命令:nohup ./sym--port 31415 &。

2.3 启动触发器

做了以上配置之后,还需要在数据库中将触发器启动,注意是在源数据库中启动。以小时表的同步为例。用以下语句查看表的触发器:SELECT TRIGGER_NAME,STATUS from all_triggers where table_name=‘SURF_WEA_CHN_MUL_HOR_TAB’,可以看到小时表的触发器:SYM_ON_I_FOR_SRF_W_CHN_ML_HR_;SYM_ON_U_FOR_SRF_W_CHN_ML_HR_;SYM_ON_D_FOR_SRF_W_CHN_ML_HR_。让触发器生效可以用以下示例语句:ALTER TABLE SURF_WEA_CHN_MUL_HOR_TAB ENABLE ALL TRIGGERS;启动触发器后,数据就可以从源数据库(核心库)同步到目标数据库了(行业库和INT库)。如果只需要在目标数据库中存几天数据,那么就需要创建存储过程来删除几天之前的数据。例如删除7 d以前的小时数据的存储过程可以通过以下语句创建:

CREATE OR REPLACE PROCEDURE PROC_DROP_PATITION_HOR_TAB AS

BEGIN

DELETE FROM SURF_WEA_CHN_MUL_HOR_TAB WHERE

D_DATETIME

END PROC_DROP_PATITION_HOR_TAB;

在实际应用中需要创建一个定时任务来定时启动该存储过程。但是创建定时任务的时候可能会提示没有权限:insufficient privileges。可以在数据库工具pl/sql中手动建。然后用SELECT*FORM USER_JOBS查看,其中JOB_ID 是系统分配的,如图2所示。

图2 创建定时任务Fig.2 Create timed task

然后用以下语句手动启动定时任务。

BEGIN

DBMS_JOB.RUN(24);

END;

这样即可使定时任务生效,等到约定的时间,即可执行定时任务。如果需要立刻启动定时清理任务,则用如下语句手动运行定时任务。可以从日志中看到是否运行成功,如图3。

BEGIN

DBMS_SCHEDULER.RUN_JOB(′DROP_SEVP_K_PARTITION′,TRUE);

END;

3 总结

本文以同步CIMISS核心区小时气象观测数据到行业库和INT库为例,详细介绍了SymmetricDS软件的安装部署及具体业务配置。目前SymmetricDS可以稳定运行,可以稳定高效将数据同步到目标数据库。并为公司及公众用户、行业用户等专线用户提供实况和预报数据,从而充分利用资源,满足了不同用户对气象数据的需求,也发挥了行业库和INT库的社会效益。

图3 查看定时任务运行状态Fig.3 Check the running status of timed tasks

猜你喜欢
触发器启动部署
一种基于Kubernetes的Web应用部署与配置系统
Multisim13仿真软件在触发器中的应用分析
晋城:安排部署 统防统治
部署
《悦读·家》暨“悦读·家@万家”活动启动
触发器在酒店管理系统中的应用
部署“萨德”意欲何为?
电启动机的正确使用
西部最大规模云计算中心启动
俄媒:上合组织或9月启动扩员