日期:2014-05-18  浏览次数:20670 次

关于高考查分高并发查询的设计方案


最近需要做一个高考查分功能,数据大概是50w。由于每天查询的人比较多所以性能上需要优化。听同事说之前做过高考查分功能,高峰期服务器经常会挂掉。。。

我的思路是:为了避免查询数据库,把50w数据按准考证号排序然后一次加入到内存装入到两个数组里,
一个数值用来存放考证号arr1,另外一个数组arr2存放学生考试相关信息(身份证|准考证|姓名|语|数|外|综合)
查询的时候根据准考证号通过二分查找从arr1查询出下标值index,
然后arr2[index]得到学生成绩,核对姓名与身份证如果正确则返回分数然后在页面显示。
不知道这样设计是否合理,欢迎各位大牛给出您宝贵的意见。

高并发 高考 性能优化 内存 并发

------解决方案--------------------
你把数据加载到数组有没有考虑过内存的占用情况,如果是实时查询的数据只能是优化下SQL语句,比如建索引之类的方式。
------解决方案--------------------
你内存里运行的不只是那两个数组,行不行自己试,“内存50w的数据应该还行吧”,行不行不是靠你想当然决定的。

都装内存里了还装什么数组,直接造个B-Tree。
------解决方案--------------------
你可以弄个分布式缓存,如:memcache,弄5个,第一个存1-10万,第二给存10到20万....然后程序控制。这样效率会高多了。
------解决方案--------------------
按道理高考查询的这些数据都不会再修改了,只是提供查询而已,大可以使用第三方缓存框架这么一些热点数据完全无压力...没必要全部装在内存里...
------解决方案--------------------
这种访问压力也能挂,看来用的是笔记本当服务器啊。
------解决方案--------------------
引用:
Quote: 引用:

按道理高考查询的这些数据都不会再修改了,只是提供查询而已,大可以使用第三方缓存框架这么一些热点数据完全无压力...没必要全部装在内存里...


缓存框架数据不是装在内存的吗?


缓存框架可以把数据放到内存,也可以放到硬盘,不要想多了...淘宝也不可能把全部数据放到内存那里...肯定是大部分都放在硬盘那里
------解决方案--------------------
高考分数根本不会变,直接缓存到内存就可以了。弄100个MAP,把学生按照准考证号区间 分成100组,分别丢到100个MAP里面,每个MAP也就5000个键值对。

查询先根据考号定位MAP,再从MAP里面查。反正不会修改分数,完全不用考虑多线程安全问题。