优化key-value型数据的存储-问答-阿里云开发者社区-阿里云

开发者社区> 问答> 正文

优化key-value型数据的存储

落地花开啦 2016-02-29 18:23:24 1640

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

存储 NoSQL Redis
分享到
取消 提交回答
全部回答(2)
  • 少强
    2019-07-17 18:50:46

    如果你能将数据迁到阿里云的话,上面的这个key value的数据可以用表格存储,你就不用考虑内存等问题了,21G的数据,一个月也就11块钱的存储费用。

    0 0
  • 落地花开啦
    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实例(这个根据你的访问频繁程度), 多个进程比能有效的分担负载。

    0 0
添加回答
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

推荐文章
相似问题
推荐课程