H
hongsen
Unregistered / Unconfirmed
GUEST, unregistred user!
一个网站内容监控的程序
使用方式:用户发出搜索任务,网络机器人根据任务到网上搜索网页,解析程序找出用户感兴趣的东西后通知用户。
我设想的实现如下:
(1)Client程序和数据库通信,将发出的任务保存在数据库中
(2)Server程序从数据库中取出任务队列,调用网络机器人根据任务到网上搜索网页,基于下载的网页生成解析任务,保存在数 据库中
(3)解析程序从解析队列中获取任务,进行解析,发现找到的东西就生成报警信息保存到数据库中
(4)报警程序从报警队列中获取报警任务,给用户发送报警信息。
整个实现中网路机器人、解析程序、报警程序互不通信。只靠数据库来进行异步通信。服务端程序用JAVA实现。
按道理网路机器人、解析程序、报警程序完成的是一个工作流的三个环节,应该同步才好。考虑到网络下载程序的速度,我决定将网页分析程序以异步的方式分出来。
问题如下:
(1)因为前端和后端程序不通信,后端网路机器人、解析程序、报警程序互不通信。所以每个程序为了获取相应任务队列,需要不停地去访问数据库,而且时间间隔很短(客户当然希望各个任务完成的越快越好。)这样是不是会造成系统的资源占用很厉害?
这种数据库轮询,我所设想的实现是一个while循环,看起来觉得很别扭。
另外一个问题就是客户端发出的任务规定在每天的某个时间段执行,而且不同天的时间段可能不同(用户一般不会这么BT,但有这种可能),如何实现?
(2)大家都说开发程序时应该隔离对数据库的访问。那么,有没有具体的实用的代码可供参考?
J2EE Core Pattern一书中讲到要将数据库的访问隔离起来,具体的实现方案就是定义独立的数据对象和数据访问对象。
其中,数据对象和数据访问对象是一对一的关系,数据访问对象提供对数据对象的插入、修改、删除、查询。那么,对于涉及多表的查询,如何定义其数据对象和数据访问对象?在数据访问对象提供的方法中,以数据对象为参数是否显得粒度太大。例如,我仅仅改了某个字段,但该方法提供的UPDATE语句是不是要支持对任何非关键字段的修改?
如果为每一个最终的SQL语句准备一个方法,则这样的函数将会很多。特别实业务逻辑很庞大很复杂时。本人曾经接触过一个大系统,其中用到的不同的SQL语句就多大8000个。该系统是用C实现的,按前面的说法,也就是实现了8000个函数。所幸该系统提供了自动生成工具。
使用方式:用户发出搜索任务,网络机器人根据任务到网上搜索网页,解析程序找出用户感兴趣的东西后通知用户。
我设想的实现如下:
(1)Client程序和数据库通信,将发出的任务保存在数据库中
(2)Server程序从数据库中取出任务队列,调用网络机器人根据任务到网上搜索网页,基于下载的网页生成解析任务,保存在数 据库中
(3)解析程序从解析队列中获取任务,进行解析,发现找到的东西就生成报警信息保存到数据库中
(4)报警程序从报警队列中获取报警任务,给用户发送报警信息。
整个实现中网路机器人、解析程序、报警程序互不通信。只靠数据库来进行异步通信。服务端程序用JAVA实现。
按道理网路机器人、解析程序、报警程序完成的是一个工作流的三个环节,应该同步才好。考虑到网络下载程序的速度,我决定将网页分析程序以异步的方式分出来。
问题如下:
(1)因为前端和后端程序不通信,后端网路机器人、解析程序、报警程序互不通信。所以每个程序为了获取相应任务队列,需要不停地去访问数据库,而且时间间隔很短(客户当然希望各个任务完成的越快越好。)这样是不是会造成系统的资源占用很厉害?
这种数据库轮询,我所设想的实现是一个while循环,看起来觉得很别扭。
另外一个问题就是客户端发出的任务规定在每天的某个时间段执行,而且不同天的时间段可能不同(用户一般不会这么BT,但有这种可能),如何实现?
(2)大家都说开发程序时应该隔离对数据库的访问。那么,有没有具体的实用的代码可供参考?
J2EE Core Pattern一书中讲到要将数据库的访问隔离起来,具体的实现方案就是定义独立的数据对象和数据访问对象。
其中,数据对象和数据访问对象是一对一的关系,数据访问对象提供对数据对象的插入、修改、删除、查询。那么,对于涉及多表的查询,如何定义其数据对象和数据访问对象?在数据访问对象提供的方法中,以数据对象为参数是否显得粒度太大。例如,我仅仅改了某个字段,但该方法提供的UPDATE语句是不是要支持对任何非关键字段的修改?
如果为每一个最终的SQL语句准备一个方法,则这样的函数将会很多。特别实业务逻辑很庞大很复杂时。本人曾经接触过一个大系统,其中用到的不同的SQL语句就多大8000个。该系统是用C实现的,按前面的说法,也就是实现了8000个函数。所幸该系统提供了自动生成工具。