douxun2023 2014-01-23 21:30
浏览 38
已采纳

使用PHP保存从Memcache中的DB返回的巨大记录

I am developing a site (using PHP + Memcache) in which users can have friends and is stuck at a point in thinking of saving a list of Friends of a user which has more than 100K friends. Suppose, if user has 100K friends, how would you save them in Memcache? Currently I have this code.

$ttl = count($result); //about 10K friends
for($i=0; $i<$ttl; $i++)
{
    $friendslist[$result[$i][0]] = $result[$i]; //$result[$i][0] = Friend's ID
}

$mem->set($usrid,$friendslist);

This creates many problems.

1) First of all memory issue and performance in saving and retrieving such huge array.

2) Cannot save more than 1mb in array

Any Einstein have good trick to save such records in memcache? What would be the code to save and retrieve such list? Any idea how Twitter or Facebook would be saving if such huge records are returnd from DB?

  • 写回答

1条回答 默认 最新

  • dongzaliang4492 2014-01-23 21:48
    关注

    First of all I would suggest you to not save such huge record in single array instead call needed list of friends from Database just like pagination. But if still you need it then I am not sure if this is correct approach or not but you can give it a try.

    $ttlsets = count($result)/1000; //100K = 100 sets
    
    for($i=0; $i<$ttlsets; $i++)
    {
        $friendslist = array();
        for($j=0; $j<100; $j++)
        {
           $friendslist[$result[$i][0]] = $result[$i]; //$result[$i][0] = Friend's ID
        }
        $mem->set($usrid.'set'.$i, $friendslist);
    }
    
    $mem->set($usrid.'counter', $ttlsets);
    

    Now you have a list of friends with Sets. And you can also check how many sets you have. Now you can AJAX and call each Set individually having 100 friends in one set. So, now you dont have to go DB. But again this is not a full proof solution but shows everything fine till here.

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 Python3.5 相关代码写作
  • ¥20 测距传感器数据手册i2c
  • ¥15 RPA正常跑,cmd输入cookies跑不出来
  • ¥15 求帮我调试一下freefem代码
  • ¥15 matlab代码解决,怎么运行
  • ¥15 R语言Rstudio突然无法启动
  • ¥15 关于#matlab#的问题:提取2个图像的变量作为另外一个图像像元的移动量,计算新的位置创建新的图像并提取第二个图像的变量到新的图像
  • ¥15 改算法,照着压缩包里边,参考其他代码封装的格式 写到main函数里
  • ¥15 用windows做服务的同志有吗
  • ¥60 求一个简单的网页(标签-安全|关键词-上传)