问题描述
SQL数据库中的其中一表的是数据是按时间(一秒中一条新的记录)采集数据记录的。我要在界面上做一个ListBox列表,按要求的时间(n秒)实时读取数据库中表的最新记录,本来想的是用timer或搞一线程,但是这样搞是不是要实时的打开数据库联接,读表记录,关闭联接,这样是不是太占用资源了,有没有更好的办法??通常都用什么样的方式来搞这种程序呀??
解决方案
解决方案二:
既然你要实时读数据库,那么就是要占资源啊除非你能让采集程序给你的客户端推送数据
解决方案三:
这就好比有个仓库仓库有管理员管理员需要随时知道仓库里的物资情况那么就应该在出入库的时候通知管理员而不是让管理员随时的到仓库里清点物资
解决方案四:
引用1楼Z65443344的回复:
既然你要实时读数据库,那么就是要占资源啊除非你能让采集程序给你的客户端推送数据
采集程序是一直在运行,这个程序是多用户的,不是一直在运行,如何做个推送,请详解,谢谢
解决方案五:
你要做的,相当是个监控器了,可以随时看到最新数据而且是自动刷新的最好还是每到刷新时间时,从库中读取一次喽用个timer就可以了
解决方案六:
实时的打开数据库联接,读表记录,关闭联接,这样是不是太占用资源了,有没有更好的办法这样其实占用不多的,因为用后就释放掉了反而如果读取后,不关闭联接一直开着,才称占用资源了.另外读取语句还可以做优化,不锁定表,只读表数据
解决方案七:
引用3楼u012570183的回复:
Quote: 引用1楼Z65443344的回复:
既然你要实时读数据库,那么就是要占资源啊除非你能让采集程序给你的客户端推送数据采集程序是一直在运行,这个程序是多用户的,不是一直在运行,如何做个推送,请详解,谢谢
当然是采集程序做为socket服务端,而客户程序作为客户端多个客户端可以同时连接到服务端然后保持TCP长连接不要断开服务端主动向已连接的客户端推送数据
解决方案八:
如果你能知道数据库每次会有多少数据,如果这个数据是固定数量的那么你可以使用selecttop10之类的语句,去定时访问数据库,这样占用不了太多资源而如果你必须把数据库里的数据都读出来,再判断哪些是新数据,哪些是旧数据,那么这个设计方案就很扯淡了
解决方案九:
而且最关键的问题是如果仅仅是数据新增,那么可以用主键排序取最新的N条数据而如果还想监控数据变化,通过读数据库的方式根本不可行
解决方案十:
引用4楼liuqian4243的回复:
你要做的,相当是个监控器了,可以随时看到最新数据而且是自动刷新的最好还是每到刷新时间时,从库中读取一次喽用个timer就可以了
联接数据库时是不是有一超时问题,如果我一秒刷新一次(打开数据库,查询指令,关闭数据库),有没能可能这一秒的数据还没有处理完,下一秒的又来了呢?
解决方案十一:
引用9楼u012570183的回复:
Quote: 引用4楼liuqian4243的回复:
你要做的,相当是个监控器了,可以随时看到最新数据而且是自动刷新的最好还是每到刷新时间时,从库中读取一次喽用个timer就可以了联接数据库时是不是有一超时问题,如果我一秒刷新一次(打开数据库,查询指令,关闭数据库),有没能可能这一秒的数据还没有处理完,下一秒的又来了呢?
如果你用timer做,那么当然是执行查询的时候暂时关闭timer,查询结束再打开timer而不是不管上一次是否执行完都开始下一个任务
解决方案十二:
引用7楼Z65443344的回复:
如果你能知道数据库每次会有多少数据,如果这个数据是固定数量的那么你可以使用selecttop10之类的语句,去定时访问数据库,这样占用不了太多资源而如果你必须把数据库里的数据都读出来,再判断哪些是新数据,哪些是旧数据,那么这个设计方案就很扯淡了
嗯,我准备是在查询语句中(selectf1,f2,f3,....fromtable1whereid>上次读时保存的最大id),这样搞....如果这种程序都是这么搞的话,那我就写写试试
解决方案十三:
数据库是有连接池的频繁的打开关闭连接,物理连接其实并不会关闭,关闭的仅仅是逻辑连接所以并不是在底层频繁的对数据库发起连接请求,这个你可以不必担心但是数据确实是实实在在的要交换的每次查询,你都需要将SQL语句发送到数据库,数据库解析,处理,再将结果发送给你如果数据量小还好,数据量大的话,尤其是客户端很多的情况下,对数据库压力还是挺大的
解决方案十四:
我说点撸主能理解的话,一个网站如果流量大的话,现在不跟你扯缓存,就谈同一秒钟可能有数十人同时连接、打开、查询、关闭数据库,数据库居然没死掉,是不是奇迹啊?所以你不用担心啊。
解决方案十五:
采集程序启动后,在数据库服务器上更新自己的状态,以便监控端启动后来连接。监控端启动后,查询数据库,获取采集点信息,建立与采集程序的连接,采集程序往数据库插入一条纪录,同时將这条纪录发送到监控端。服务端在接到采集程序发过来的纪录后,处理显示。
解决方案:
解决方案:
引用11楼u012570183的回复:
Quote: 引用7楼Z65443344的回复:
如果你能知道数据库每次会有多少数据,如果这个数据是固定数量的那么你可以使用selecttop10之类的语句,去定时访问数据库,这样占用不了太多资源而如果你必须把数据库里的数据都读出来,再判断哪些是新数据,哪些是旧数据,那么这个设计方案就很扯淡了嗯,我准备是在查询语句中(selectf1,f2,f3,....fromtable1whereid>上次读时保存的最大id),这样搞....如果这种程序都是这么搞的话,那我就写写试试
非常同意,如果仅监视新增还好,监视所有变化,很难的