做了一个项目:
有几十个节点,每个节点用计算机通过采集器采集信息。
采集的信息存储在中央数据库(SQL Server 2000),因为采集量大,各个节点同时给中央数据库传信息,通过ADO,select,insert,update这些语句操作数据库,效率很低。
现在想提高效率,采用分布式数据,先将数据写在本地,然后通过时间段(1小时)与中央数据库同步,由于考虑到客户端安装的简易性,各个节点不安装SQL SERVER,但可以安装Access,XML,或者将本地数据放在内存里,在这样的情况下能否做到与中央数据库的同步?我想主要是合并复制的问题,SQL Server的复制功能都做到了,但必须都是SQL Server数据库,有没有办法自己写代码来实现合并复制的功能在
不同的数据库中,或者是在本地内存中与远程数据库同步?本人想法有过偏,但为寻求思路,先务虚,后务实。
如有更好办法解决问题的,请教了。

解决方案 »

  1.   

    我觉得楼主好像混淆了复制和分布式数据库概念,二者是不同的,复制订阅是用于同步数据库,而分布式数据库并不一定需要数据同步,而且数据库也可以不同,可以是其它数据库(ACESS,ORACLE....)
      

  2.   

    TOO SIMPLE!使用OSQL.EXE(53K)完全可以实现,不需要安装SQL的客户端!可以在前端应用程序定时启动
      

  3.   

    本人以前有处理过类似的问题:
    我给你的建议是,如果数据量很大的话,用SQL Server复制也是没办法的,经常会失败的,我以前就碰到这种情况。后面我们采取的方案:在中央数据库(SQL Server 2000)作一个存储过程,作你所说的结点数据同步功能之用,然后在SQL Server 作一个作业,功能为在一定时间段内循环执行以上的存储过程,问题解决.
      

  4.   

    to wgsasd311(自强不息) :
       分布式数据写往中央数据库会存在数据冲突问题,比如说,各节点会有可能会同时增加一个用户,而这个用户其实是一个人,在一段时间里与中央数据库同步时,会用到复制。在分布式数据库的复制机制里就会解决这种冲突。
      

  5.   

    不需要中央数据库,也不用复制,在每个sqlserver 中为用户访问的每个表做触发器,插入之前先对每个数据库进行查询,无记录就插入。这可以保证数据无冲突。
    查询的时候就用存储过程,查询每个服务器,其中肯定只有一个有数据,将返回的数据提交给客户。
    修改的时候就把修改操作转发给有数据的服务器,让它来完成。
      

  6.   

    To 各位朋友 :
       客户端只是需要中央数据库的几张表而已,不是将整个数据库般过来,客户端本身是不留数据的,它做的工作只是采集信息送往中央数据库,由于信息量大,而且不间断,就采用了先将数据暂存在本地,然后断开和中央数据库的连接,经过一段时间后再与其连接,一次性将数据送往中央数据库(同步几张表),所有的客户端都是这样做的,这样提高了效率,不会频繁访问中央数据库。
    这样做就会出现数据冲突问题:
     
     客户端会送同样的数据给中央数据库,而中央数据库只要一份。
     一个表的数据的更新的序列打乱。假如:应该是 a -> b -> c -> d ,
    同步后可能会,b -> d -> a -> c    为了解决这些问题,DBMS做了复制的机制,分3种:快照复制、事务复制、合并复制
    现在我所说的是客户端缓存数据定期与中央数据库同步,解决数据冲突的问题。
    条件:
    1、效率占第一。(客户端不可频繁访问中央数据库,在规定时间段内只连接一次,送完数据后是和中央数据库断开的)
    2、客户端结构简单,不安装数据库系统,可以有缓存文件或者缓存在内存。
    3、有更好的办法解决此问题。
      

  7.   

    "使用OSQL.EXE(53K)完全可以实现,不需要安装SQL的客户端!可以在前端应用程序定时启动"
    完全可以满足你的需要!
      

  8.   

    To skylion():
    说的详细点啊,太笼统了,我也学习学习。谢谢啊