假定现在有这样一个问题,界面上有两个Grid数据网格,左边的用来显示在校学生的基本信息,右边显示的是左边某选中的学生的历年成绩。这样一个简单的问题,怎么来设计一个高效的数据解决方案。
一个小问题的狂想
原创
©著作权归作者所有:来自51CTO博客作者逸泽的原创作品,谢绝转载,否则将追究法律责任
这个问题很简单的,有人可能就这样说了:在左边Grid的单击或选中改变事件下,到成绩表中根据学号查此人历年成绩不就行了。事实上我也见过有人这样写,但稍有头脑的开发员都会杜绝此类操作。很简单,这样无异于把数据库服务器逼上了绝路。请求太过频繁了,服务器的压力太大了!一般的开发员会这样处理:在界面初始化的时候就把成绩表中的全部数据查到客户机的内存里,再根据左边选择的改变来操作内存中的数据。这样既减小了服务器的压力,又提高了效率,因为直接从本地内存中检索数据的速度是很迅速的。但这样操作还是很有隐患的,随着数据量的增加,成绩表中的数据可能就变成了巨大的海量数据,本地的内存能否够用呢。再者一下涌入大量数据把内存占满,也会造成处理效率降低甚至会更严重。想了一下,只想到了很蹩脚的方法。首先,从网络方面下手,服务器的负载均衡,服务器的合理集群就会有非常好的降压分流作用,况且横向扩展的方案要比纵向提升服务器档次的方法代价小的多。再有就是数据库结构设计,从表也就是上面的成绩表,要有索引,这样才更有利于高效的查询。从程序开发角度,假定成绩表的数据量已经非常巨大了,本地内存根本满足不了,我会这样做:先筛选某段学号的成绩(以最大限度使用本地内存为限),因有索引,这段查询的效率基本不会受影响,查到本地内存。根据左侧的学号查询成绩时,先查本地的内存中是否存在,如不存在,再发送查询语句到服务器查询,查询后的数据可追加到内存中保存,也可用后直接释放以节省内存。因大部分的数据已经提前取到本地,再次请求的可能就会很小,即使再次请求,如果对服务器进行合理布局,也基本不会造成效率上的影响。 但是这种大数据量的情况一般不会出现,因为这种情况下一般都对主表进行了分段管理,如对学生按年级或班级,或者按时间段划分。这样从表的数据检索量就大大减少了,自然不会出现海量数据问题,再者对历史数据的备份和归档也会减少当前的数据量。所以只有狂想一下喽。
上一篇:如何写出高效率的sql语句
提问和评论都可以,用心的回复会被更多人看到
评论
发布评论
相关文章
-
发现一个小问题
今天用VC6编程的时候,为文本框构建了一个float的变量m_fFreq, 然后计
float 编程 测试 四舍五入 精度问题 -
PPT版本兼容的一个小问题
PPT图表变为图片
兼容模式 表数据 另存为