sql server2000数据库中有20张表,每张表中的记录都在增长,大概为每分钟10-50条,现在我需要在前台编写一个程序,实时读取数据表中新增加的记录,想法是使用System.timer计时器,每10秒钟读取一次数据库,取出数据,现在的问题是我应该使用一个timer,添加20个elapsed事件对各表进行操作(已做防止重入),还是使用20个timer分别对每张表进行操作?如果当系统中有20个timer同时运行的时候,长时间运行(几个月)程序的稳定性如何?望大家指点,谢谢
解决方案 »
- winform圆角框的制作以及窗口最大化的问题
- winform中的两个控件的使用,一定帮我解决啊
- treeView1_AfterLabelEdit事件触发MessageBox2次为什么?
- 简单问题
- winform中form的基类?
- 区别何在??
- 拖动treeView的结点到文本框怎么实现/
- 哪位知道什么地方有《Visual C#基于组件的开发》这本书的源码下载?谢谢!!!
- 如何在GridView根据某列字段控制显示记录
- Array类为什么属于System命名空间,而不属于Collections空间?
- 关于数组保存的问题?我是业余新手~~求各位大哥指点下,放分~~~
- 我的人体彩绘摄影作品,欢迎回帖
我把我的程序和目标说一下吧,大家帮我分析分析:
本地有一个SQL Server2000数据库,数据库中有20张表(由第三方软件建立),第三方软件一直在向此20张表中写入记录,大概每张表为10-50条每分钟,远程有一个ORICAL数据库,数据库中表的格式与本地数据库相同,我现在需要做一个传输系统,在本地感知本地数据库各表中由第三方软件新插入的记录,实时将其发送到远程的数据库中(本地与远程数据传输的过程由消息中间件完成)。
我现在的做法是在发送端程序中建立了20个System.timer,每个timer控制一张表的数据读取、传输。
对于每个timer,具体为每10秒钟触发一次elapsed事件,在事件中先连接数据库,select新插入的记录,通过datareader读到程序中,写成一条条insert格式的sql语句,然后将sql语句通过消息中间件传输到远程,然后远程接收程序直接执行sql语句,插入到远程数据库中。各位看我这样的做法有没有不妥?如果有更好的方法,请多指点,谢谢
每一个Timer其实都是使用一个Threading pool线程池里面的线程,如果使用20个Timer,相当于同时开了20个线程,这是资源的浪费,造成了不必要得开销。程序中的异步调用,异步io等都是使用线程池里面的线程。同一个Timer的elapsed被触发执行的时候是单线顺次执行的
你能说说用存储过程操作的流程吗?是不是对每张表建立一个存储过程,主程序中运行一个timer,每次触发时程序执行各存储过程,然后把数据表的记录读入到程序中?我是新手~~~ps:作业定时只能最短每小时执行一次吧?
你的想法是,写一个winform程序,利用定时器读取本地的数据,然后同步到远程的数据库。
而我上面的说法是不用写这个winform程序,即数据库对数据库直接操作:
你可以在sql2k本地,写这个存储过程。
首先sql2k是可以通过添加链接服务器(即添加远程oracle数据库)来操作远端数据库数据的;然后用存储过程完成数据同步过程(的主要内容就是数据处理了:包括判断更新哪些数据、数据同步,已同步数据的标记的等);最后,添加定时作业,sql2k的作业是可以重复到秒的。另外建议用作业方式,这样能够更节省主机资源。这里要注意到几点:1,要确保作业执行用户对表的具有操作权限;2,sql2k下添加链接服务器,因为远端是oracle,故应该首先在本地安装oracle的客户端。