我用c# winform 开发。需要界面上实时获取数据库的数据。。如定时器 没2秒 或3秒等  都不是实时的数据,并且没2秒 3秒访问数据库,很耗资源。大家有碰到这个问题的吗?实时访问数据

解决方案 »

  1.   

    这种系统,直连数据库本身就是个问题,建议你搞个三层,中间加一个应用层,用socket传输数据,服务器推送,中间层可以做一些缓存操作,这样及时是 拉 的方式,服务器压力也会减少
    当然配合硬件也可以改善负载平衡
      

  2.   

    我的sqlserver 数据库里的一张表,我想在界面上实时的显示。SOCKET传输,服务器推送?可以说的详细点吗?
    或者用什么技术实现
      

  3.   

    如果两到三秒访问一次,如果只有一个客户端,建立一个连接是比较好的办法。
    关键是你的客户端同时会不会有几百个人同时在连,Oracle默认连接应该是150
    只要Sql语句查询的表不大,不耗资源,每隔2秒查询不是问题关于缓存: 楼主每隔2-3秒钟去查询数据库显然是为了得到最新数据
    这样要缓存有什么用呢?今天听了数据同步的一个讲座,听到的一些解决方案,可以给楼主借鉴:
    Timestamp - 比如你的查询表搞个时间戳,每次轮询去查时间戳,发现更新了之后再拉整个数据
    Trigger - 这也是个好方法
    Database log - 业内数据同步工作大多依赖于这个,个人没怎么用过,对Log不熟
    Data comparison - 比较麻烦
      

  4.   

    用户较少的话直接长连接吧,不会耗费什么资源的。java的连接池都是长连接,开5个或者10个一直放那。所以你只有1,2个用户的话就果断长连接吧。如果是用户很多的话你可以用内存数据库,反正也只一张表。
      

  5.   

    刚才回了个问题有点这方面感觉,感觉也适合你的,做个sql clr项目,自定义触发器,有数据更新时,通过Socket异步发送到显示前台,或发个指令给前台让前台来向数据库读取,那个肯定是实时了,无需做无用功了
      

  6.   

    你看一下我刚才做的一个示例吧Udp通知显示实现的很简单的,不过大致就这个思路吧,如果你有更好的请共享一下