最近需要做一个高考查分功能,数据大概是50w。由于每天查询的人比较多所以性能上需要优化。听同事说之前做过高考查分功能,高峰期服务器经常会挂掉我的思路是:为了避免查询数据库,把50w数据按准考证号排序然后一次加入到内存装入到两个数组里,
一个数值用来存放考证号arr1,另外一个数组arr2存放学生考试相关信息(身份证|准考证|姓名|语|数|外|综合)
查询的时候根据准考证号通过二分查找从arr1查询出下标值index,
然后arr2[index]得到学生成绩,核对姓名与身份证如果正确则返回分数然后在页面显示。
不知道这样设计是否合理,欢迎各位大牛给出您宝贵的意见。高并发高考性能优化内存并发

解决方案 »

  1.   

    你把数据加载到数组有没有考虑过内存的占用情况,如果是实时查询的数据只能是优化下SQL语句,比如建索引之类的方式。
      

  2.   

    你内存里运行的不只是那两个数组,行不行自己试,“内存50w的数据应该还行吧”,行不行不是靠你想当然决定的。都装内存里了还装什么数组,直接造个B-Tree。
      

  3.   

    你可以弄个分布式缓存,如:memcache,弄5个,第一个存1-10万,第二给存10到20万....然后程序控制。这样效率会高多了。
      

  4.   


    B-Tree 查找性能跟二分查找性能不是差不多吗?
      

  5.   

    高考分数根本不会变,直接缓存到内存就可以了。弄100个MAP,把学生按照准考证号区间 分成100组,分别丢到100个MAP里面,每个MAP也就5000个键值对。查询先根据考号定位MAP,再从MAP里面查。反正不会修改分数,完全不用考虑多线程安全问题。