只有10M内存,但是有10000000个人准备签到,id是1-10000000,给出解决方案

解决方案 »

  1.   

    可以学习一下bitmap算法,一个字节8位,设置0或者1,代表8个人签到。现在你的内存就够用了吧
      

  2.   

    10M = 10 000 000 字节
    人数 = 10 000 000
    一个字节要记录 一个 8位十进制的id,和一个bool值 不够ba
      

  3.   

    10M = 10 000 000 字节
    人数 = 10 000 000
    一个字节要记录 一个 8位十进制的id,和一个bool值 不够ba你都没搜索一下bitmap算法就回答吗?
    简单说,bitmap就是把每个bit作为一个人的标识,一个字节有8个bit,可以记录8个人的bool状态。
    1千万个人只需要1.2M不到的内存就可以标识。如果你的1千万个人的id是顺序无断开的,那么都不需要保存映射关系,
    直接序号存取就好了。如果1千万个人的id是不连续的,那么你要用一个算法来保证每个人的id落到唯一的固定bit上
      

  4.   

    id是1-10000000
    内存是 10M ≈ 10000000 字节强
    合每个 id 一个字节,按下标访问就可以了
    10M 可以按位保存 80000000 个 id 信息,没有难度但楼主的设想并无实用价值,因为 http 是无状态的,php程序间并不能共享这 10M 内存
      

  5.   

    也有可能楼主说的是Redis内存,哈哈