问题描述
打算给自己开发中的在线订餐系统做一个在线客服,用SessionId跟商家的ID区分,采用Ajax,定时刷新,觉得如果把聊天的记录存储在SQL数据里,那么如果对话的客户多了的话,定时刷新,每次都要读取一次数据库,对数据库的负荷很大。因为商家的数量有限,所以打算用内存中的DataTable来保存各个商家聊天记录,定时或者检测到内存中DataTable的数据资料到了一定数量(比如记录超过100条,那么就把前80条存到SQL数据库里),因为每次直接从内存读取数据,不经过数据库,这样应该能减少很大的数据库负荷并且提高访问速度。可是不知道该用什么办法在内存中长期保存离线的DataTable考虑过用Cache,可是偶到目前为止好像只能把整个DataTable从缓存中读取出来,添加一条记录以后再又整个Insert()回去,可能性能上有些问题或者用Session的话,可能也不错,不过问题跟Cache一样,但反正最多也就是五十到一百条记录的DataTable,而且一个商家才只有一个刚刚查到用静态的DataTable好像最好了,好像可以直接插入,读取不过小弟也只是初学者,所以向这里的高手请教一下,到底哪种方法比较好,或者麻烦推荐一下更好的方法非常感谢^_^
解决方案
解决方案二:
关注.!学习学习!
解决方案三:
汗,对了,差点忘了,不能用Session,因为用Session的话,客户跟商家中的Session是不一样的估计Cache可能是比较好的方法了
解决方案四:
刚刚写了个小程序测试了一下CacheDataTable是引用类型的DataTabledt=Cache["Data"]asDataTable;DataRowdr=dt.NewRow();dr["ID"]="2";dr["Name"]="后期加入";dt.Rows.Add(dr);不需要重复添加入Cache就可以更新Cache里面的数据了,加上Cache有完善的释放机制所以决定用Cache了
解决方案五:
Cache推荐
解决方案六:
正在学习中,估计Datable要灵活些
解决方案七:
Cache好像受到限制比较多
解决方案八:
既然才100多条记录,就直接用数据库也没有什么问题。SQLServer的性能还是非常高的
解决方案九:
^_^回楼上的朋友倒不是担心读取的数据数据多才不用数据库的。而是如果采用数据库的话,因为没有采用推送(推送就干脆不关连接了,更耗资源)那么每个客户的每个连接,每平均每五到七秒就要打开一次数据连接,AJAX刷新一次,那么在线人数要是多一些的话,数据库倒是撑得住,可是连接池估计就爆掉了,呵呵。只好想这些办法的说,呵呵