分布式数据库方案,哪个更好 ?

发这个post,我是希望把我的设计想法写出来,给大家评点一下,甚至提出更好方案的,不知道能否放在首页 ?

背景:
      现在有一web应用程序,使用sqlserver为数据库,但有一些数据库是需要同时存放在本地SQLserver和远端Oracle数据库里的,而且远端有三个Oracle数据库,根据不同的数据类型存放在不同的Oracle数据库

需求:
     当用户在web界面上提出群发短信要求时候,web应用程序需要提取本地sqlserver数据库的某群组注册用户的手机号码信息,然后把要发送的信息的同时存储在本地sqlserver数据库表和相应的远端Oracle数据库表,同时本地数据库需要保存每天数据是否成功插入到远端Oracle数据库里了,而且需要操作的数据量是比较大

方案:
     我想到的有两种做法,欢迎大家拍砖
     一,直接连接数据库
     在一个发送方法里,同时直接连接本地sqlserver和远端Oracle数据库,这样操作起来很方便,但这种方法存在的问题如下:
    程序需要从本地sqlserver提取的数据量比较大,所以用DataReader会比较好,但Reader打开的时候,连接已被占用,无法同时操作数据库
       while(datareader.read()) //读取用户信息
       {
             //构造好的短信内容就不能够再连接本地数据库进行数据插入工作了
             //这里还同时需要连接远端Oracle数据库,datareader占用连接的时间会很长
       }
     如果使用DataSet,想象一下,做一个操作,就需要把几万条记录甚至上10万条记录同时存放在内存中,如果并发数大的情况,简直不敢想象,它要占用多少内存!

    二,使用链接服务器和触发器
     在本地sqlserver建立三个远端Oracle数据库的链接服务器,然后在短信表中建立insert触发器,web程序只需要把数据插入该表就可以,然后在触发器根据数据类型通过链接服务器插入相应的Oracle数据库表,这种方案的好处就是所有数据操作集中在数据库里,这样程序可以做到,只需要调用一个存储过程,把所有的数据调用,构造,插入全部在数据库里完成

疑惑:
      1,两种方案,我更倾向与选择第二种,但我们的项目组对链接服务器各方面的了解甚少,在离项目结束期限还有不到一个月的前提下,采用不熟悉的方案,是否会存在很大的风险 ?
      2,第一种方案,我们很熟悉其使用方法,但必须使用DataSet,内存需求太大,并发处理性能很差,而且程序会有崩溃的风险

      3,还有更好的方案吗 ?

    这几天都在探索不同的实现方案,限于知识面的限制,只能想两种,在此发post,希望各位一起讨论,拍砖,希望能找到比较合理的方案。
      

posted @ 2004-12-18 14:19  kwklover  阅读(4330)  评论(10编辑  收藏  举报