Monday, April 16, 2007

工作小结(2)
--- 通用数据推送
首先,介绍一下我通过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.
以下附上我对某个业务完整的描述。

并以图说明


Sunday, April 15, 2007

工作小结(1)
--- 通用数据推送
目前,在公司的一个重要工作内容就是做sprider和b2b数据内容的推送工作。
简单需求描述 公司主要的业务领域就是b2b的垂直搜索,我所在的数据组主要
负责下载联盟网站的b2b的信息,然后讲下载数据进行一定的处理推送到目标库
(线上运行库)中。
以下就是经过这段时间工作对公司业务理解的一个流程图。



那我主要负责的就是推送以及生成生成信用值。

好了,该说说自己的工作了,数据推送本身很简单,就是把a库中数据推送到b库中。但是由于下载数据本身、的不严谨,以及两个库中表结构页不由差异,同时还要求增量的推送。(还有很多小细节方面的东西,比如图片的推送,针对某些字段的简单处理,对一些标志位的设定等等 总之 由于业务的不同会产生众多的问题)。
如题所述公司要求的通用推送,通用两个字就是我工作的核心内容。
首先来说说我的解决问题的思路。
1 我们通过一个xml文件来定义整个推送的流程
2 然后通过我们的程序来执行定义好的推送流程
这样的话可以将我的java代码和我们面对的业务相分离,业务只和xml相关,做到通用这个字。