本帖最后由 luxiaoleics 于 2014-12-30 21:16:53 编辑

解决方案 »

  1.   

    感觉量不是很大啊 
    但是感觉你相同的积分应该比较密集  或者说你用Map的话 积分做Key  可能导致map里某些value的list贴别长 猜测系统整体符合正态分布    所以你中间端的value应该会比较大
    所以你可以考虑再采用其他的key  而不单纯是一个积分
    另外你从800-1200取值只是为了random数组 拼凑出来一个域 这个没必要取完list再做random  可以遍取编做random 最后取完了直接形成一个域返回
      

  2.   

    如果你每个list特别大 那可以考虑基于多线程去fetch 
    但感觉数据不是很大啊  java做这个应该不是瓶颈啊 
    现在你这个APP上线了? 这部分返回结果不是很快?
      

  3.   

    目前还没上线....  因为是在线数据打离线数据.. 所以数据量会越来越大的...
    我只是觉得从 800到1200这种区间内去取值的时候, 要循环400次.. 而且其中还有可能是空值(即这个积分没有玩家)... 我现在优化了一下下.. 就是先从800到1200 这个段内随机取出 几个 积分.. 然后再根据这几个积分..去map中取list.. 然后再像你说的那样边取list边从里面随机几个数据汇总...
    但感觉我这个结构... 优化的空间好像还挺大的......  担心上线的时候性能出问题.... 
      

  4.   

     我觉得你可以测测这部分的performance
    就循环100万次 
    map根据你们线上的情况  将800-1200之间设定一个比较大的值 然后跑100万或1000万次看看performance
    如果很慢 再改  不慢的话(比如一个匹配操作也就不到100微妙,这样的话你并发能支持1W个同时匹配) 如果能满足需求 就不改了呗
    一切不成熟的优化 都是万恶之源目前还没上线....  因为是在线数据打离线数据.. 所以数据量会越来越大的...
    我只是觉得从 800到1200这种区间内去取值的时候, 要循环400次.. 而且其中还有可能是空值(即这个积分没有玩家)... 我现在优化了一下下.. 就是先从800到1200 这个段内随机取出 几个 积分.. 然后再根据这几个积分..去map中取list.. 然后再像你说的那样边取list边从里面随机几个数据汇总...
    但感觉我这个结构... 优化的空间好像还挺大的......  担心上线的时候性能出问题.... 
      

  5.   

    也确实.. 如果能接受的话.. 是没什么问题的... 我还是按照这个来优化一下.然后好好测试一下吧.. 
    虽然游戏服务器写了不少.. 但是这个系统还是第一次写... 心里没谱... 目前还没上线....  因为是在线数据打离线数据.. 所以数据量会越来越大的...
    我只是觉得从 800到1200这种区间内去取值的时候, 要循环400次.. 而且其中还有可能是空值(即这个积分没有玩家)... 我现在优化了一下下.. 就是先从800到1200 这个段内随机取出 几个 积分.. 然后再根据这几个积分..去map中取list.. 然后再像你说的那样边取list边从里面随机几个数据汇总...
    但感觉我这个结构... 优化的空间好像还挺大的......  担心上线的时候性能出问题.... 
      

  6.   

    没必要过早优化的  先做出系统 然后profile看看够不够performance 然后再看看怎么针对具体的问题调优
    见过一些项目 都是过早介入调优后 然后失败了  
    因为一些看起来复杂度很低的算法 往往又挂着一个很大的常熟 所以尽量有针对性的调优