--- 通用数据推送
首先,介绍一下我通过xml对推送业务的定义。由于,我们的数据下载都是通过对某个具体网站数据的下载,
所以,我们下载的数据基本都是树状结构,如下图所示:
主要面对的问题:
1 树状结构的层数不确定
2 节点数不确定
比如说网站展示某产品,就有公司分类,公司,公司图片,产品分类,产品,产品图片等等。这里每一项都
是一个数据节点,属于不同节点的子节点。对于不同的业务就会有不同的节点数与层数。
首先,我通过对现有业务的分析总结一下每一个节点所要执行的动作。
1 从下载库中读出有效数据
2 插入对应的目标库中
3 查询下一级节点
这些是基本每一个节点所具有的属性(通用),下面是我们定义这些节点的xml。
source id="companies" interval="1000" name="company" istranstion="true" futrueid="ID" ismutheard="false">
这些是我们每个节点的一些设置信息。其中 isTranstion是指我们控制事务的粒度是从
这一级的节点开始控制的。isMuTheard是指,我们时候以这个为线索执行多线程(为了加快一下处理数度)。futrueid和interval是线程的休息,线程id号,线程间隔启动时间。
下面是对节点动作的描述
1 查询此节点的数据
query id="****" name="***" type="page" maxfield="ID">
其中id就是ibatis中对应的函数id(在这里面我们采用ibatis,具体的设置在后面详细描述)。name是来表明这个查询的含义,type和maxField主要是针对数据分页问题解决方法。
因为在下载数据中符合条件的数据经常达到几十万,如果不采取分页技术的话,会导致程序执行缓慢甚至导致崩溃。如果我们type指向page那么说明我的查询要求分页,maxFiled则是指我们是按那个字段来排序的。
2 插入更新操作数据
update id="**" name="**" type="insert" index="1">
这里有两个特殊的地方是type,我分了这么几种insert,update,procedure,transfer。前两就不需要解释了,procedure就是对存储过程的一种,transfer这个比较特殊主要是为了完成文件远程存储。最后这个index是非常关键的因为在对这个节点数据进行插入更新文件传输操作的时候这些动作的执行是有先后顺序的。
由于更新操作的前三种类型是与数据库相关的,主要就是id对应的ibatis中sql id 的调用。但是,transfer就比较特殊了。
update id="sender.transfer" name="transfer" type="transfer"
srcFile="#PHOTO_PATH#" tempFile="d:\\temp\\" targetFile="ftp://hexiaofeng:xiaofeng123@192.168.5.21:21/server/img/#IMAGEROOTPATH#/products/?imageTarget(#PHOTO_SEND_ID#)"
index="3"/>
其中srcfile是指下载文件的路径,#PHOTO_PATH#是指在存储文件路径的字段名,targetFile是指通过一定逻辑生成的目标路径名。
以上这两种动作就是我们所有数据节点的动作(也就是业务)。
下面介绍一下,我们对这些业务动作一些设置功能的配置。
1 fieldref name="WEB_×××" parentref="MAP_ID">
这个主要是针对外键引用的设置。
2 condition type="isNull" property="×××">
这个是条件设置,因为在执行一些动作的时候回需要满足一些条件才可以进行,比如两个指比较大小,判断是否为空等。这个条件嵌入到动作中完成对动作的限制。
3 statusconfig defaultvalue="0" value="1" statusfielder="SHOW_STATUS">
condition type="isChinese" property="COMP_NAME">
condition type="isChinese" property="DESCRIPTION">
statusconfig>
这个配置主要是为了一些特殊要求所设定的,比如说当数据满足一下条件是将SHOW_STATUS设置为0或者设置成1.
以下附上我对某个业务完整的描述。
并以图说明
No comments:
Post a Comment