开发者社区> 问答> 正文

优化key-value型数据的存储

一个图片分享网站,所有用户上传的图片做了按用户ID分服务器存储。每张图片都有一个唯一的图片ID,对应上传它的用户ID。目前用户上传的图片总量已接近30亿张,也就意味着这个对应关系有30亿条。现在需要对这些键值对数据的存储做一个优化,要求:
查询速度快,数据能存储在内存中。因为我们使用了Amazon的EC2,所以希望占用内存总量不超过他们要求的17G ,数据一致性和持久化有保障。
根据网上的一些资料和推荐,我们打算用redis来存储,key为图片ID,value为用户ID。当我们实施的时候却发现,存储100W个key时就已经使用了70M内存,如果30亿个都存储进去需要21G,超过了规定的上限。
请问大家有什么好的优化方案吗?主要根据图片找到玩家这一种查询优化。

展开
收起
落地花开啦 2016-02-29 18:23:24 2983 0
2 条回答
写回答
取消 提交回答
  • 如果你能将数据迁到阿里云的话,上面的这个key value的数据可以用表格存储,你就不用考虑内存等问题了,21G的数据,一个月也就11块钱的存储费用。

    2019-07-17 18:50:46
    赞同 展开评论 打赏
  • 喜欢技术,喜欢努力的人

    我觉得在使用redis时候有误区,redis不像memcached,是简单的key, value结构的数据容器。redis是支持hash_table的。根据你的应用应该是用hash_table来存储。
    加入图片ID是10位,redis的指令是:
    hset 图片ID的前5位 图片ID的后5位 user_id
    通过ID切割的方式,一定程度上也可以减少内存的使用。
    再有就是这么大的数量级,实现下冷热数据策略。
    因为redis是单线程的,另外最好运行多个redis实例(这个根据你的访问频繁程度), 多个进程比能有效的分担负载。

    2019-07-17 18:50:46
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
存储分层企业数据存储类型选择与优化 立即下载
HBase2.0重新定义小对象实时存取 立即下载
混合存储产品 立即下载