网站建设 交单流程,WordPress明月浩空,服务专业的网站开发设计,建网站需要学什么一、问题#xff1a; 数据库表数据量极大#xff08;千万条#xff09;#xff0c;要求让服务器更加快速地响应用户的需求。二、解决方案#xff1a;1.通过高速服务器Cache缓存数据库数据2.内存数据库三、主流解Cache和数据库对比#xff1a;从以上各数据可知#xff0c…一、问题 数据库表数据量极大千万条要求让服务器更加快速地响应用户的需求。 二、解决方案 1.通过高速服务器Cache缓存数据库数据 2.内存数据库 三、主流解Cache和数据库对比 从以上各数据可知对于我们产品最可行的技术方案有两种 1.Memcached 内存Key-Value Cache 2.Redis 内存数据库 四节约内存Instagram的Redis实践 Instagram可以说是网拍App的始祖级应用也是当前最火热的拍照App之一Instagram的照片数量已经达到3亿而在Instagram里我们需要知道每一张照片的作者是谁下面就是Instagram团队如何使用Redis来解决这个问题并进行内存优化的。 首先这个通过图片ID反查用户UID的应用有以下几点需求 查询速度要足够快数据要能全部放到内存里最好是一台EC2的 high-memory 机型就能存储17GB或者34GB的68GB的太浪费了要合适Instagram现有的架构Instagram对Redis有一定的使用经验比如这个应用支持持久化这样在服务器重启后不需要再预热Instagram的开发者首先否定了数据库存储的方案他们保持了KISS原则Keep It Simple and Stupid因为这个应用根本用不到数据库的update功能事务功能和关联查询等等牛X功能所以不必为这些用不到的功能去选择维护一个数据库。 于是他们选择了RedisRedis是一个支持持久化的内存数据库所有的数据都被存储在内存中忘掉VM吧而最简单的实现就是使用Redis的String结构来做一个key-value存储就行了。像这样 SET media:1155315 939
GET media:1155315939 其中1155315是图片ID939是用户ID我们将每一张图片ID为作key用户uid作为value来存成key-value对。然后他们进行了测试将数据按上面的方法存储1,000,000数据会用掉70MB内存300,000,000张照片就会用掉21GB的内存。对比预算的17GB还是超支了。 NoSQLFan其实这里我们可以看到一个优化点我们可以将key值前面相同的media去掉只存数字这样key的长度就减少了减少key值对内存的开销【注Redis的key值不会做字符串到数字的转换所以这里节省的仅仅是media:这6个字节的开销】。经过实验内存占用会降到50MB总的内存占用是15GB是满足需求的但是Instagram后面的改进任然有必要 于是Instagram的开发者向Redis的开发者之一Pieter Noordhuis询问优化方案得到的回复是使用Hash结构。具体的做法就是将数据分段每一段使用一个Hash结构存储由于Hash结构会在单个Hash元素在不足一定数量时进行压缩存储所以可以大量节约内存。这一点在上面的String结构里是不存在的。而这个一定数量是由配置文件中的hash-zipmap-max-entries参数来控制的。经过开发者们的实验将hash-zipmap-max-entries设置为1000时性能比较好超过1000后HSET命令就会导致CPU消耗变得非常大。 于是他们改变了方案将数据存成如下结构 HSET mediabucket:1155 1155315 939
HGET mediabucket:1155 1155315939 通过取7位的图片ID的前四位为Hash结构的key值保证了每个Hash内部只包含3位的key也就是1000个。 再做一次实验结果是每1,000,000个key只消耗了16MB的内存。总内存使用也降到了5GB满足了应用需求。 NoSQLFan同样的这里我们还是可以再进行优化首先是将Hash结构的key值变成纯数字这样key长度减少了12个字节其次是将Hash结构中的subkey值变成三位数这又减少了4个字节的开销如下所示。经过实验内存占用量会降到10MB总内存占用为3GB HSET 1155 315 939
HGET 1155 315939 优化无止境只要肯琢磨。希望你在使用存储产品时也能如此爱惜内存。 参考 http://blog.nosqlfan.com/html/3379.htmlhttp://instagram-engineering.tumblr.com/post/12202313862/storing-hundreds-of-millions-of-simple-key-valuehttp://www.open-open.com/lib/view/open1409643182369.html转载于:https://www.cnblogs.com/JoannaQ/p/4470272.html