如题,系统为CS架构,采用什么办法能做到数据同步,希望大家给出一些可能的解决方案,定时刷新的办法不采取。股票的程序好像数据都是最新的,不知道是怎么做的。
因为使用者都不一定具备外网IP,所有这类软件一般都是采用定时请求远程数据库的数据,或者客户手动刷新。
你说的是行情数据吧!
客户端1分钟提交一次请求给socket server,socket server 从本地内存中获取未读取的行情返回给客户端。都是这么做的,跟数据库没关系,行情都记录在文件中,每只券每天一个文件。 行情来源是通过卫星从上交所,深交所等接收来的,每5秒收到一次全市场行情,然后用新数据刷新本地的一个dbf文件。
现在也在考虑使用tcp的服务端push方式推送行情,以前没这么做,是因为push要求的服务器资源比较多,过去的技术架构也难以维持好的性能,所以一直都使用客户端轮询。
另一个问题就是,防火墙可能被规定为禁止inbound的tcp包,这样服务器也无法推送。
你的问题,需要考虑你的数据更新频率和大小,在服务端,你可以建立一个发布-订阅总线,一个发布系统。发布系统从数据库订阅相关更新,使用SqlDependency和OracleDependency,并将更新发布到发布-订阅总线上。然后客户端向发布-订阅总线订阅更新,客户端的订阅可以是轮询查询,也可以使用tcp的双向通讯功能。客户端接收更新的方式,可以是更新的数据,也可以是更新的主题,然后再通过主题去服务器获取相关主题的更新。后一种方式,可以参考微软的Direct Push技术,这样可以使用无状态的http,以规避防火墙的限制。