专栏名称: 数据分析与开发
伯乐在线旗下账号,分享数据库相关技术文章、教程和工具,另外还包括数据库相关的工作。偶尔也谈谈程序员人生 :)
目录
相关文章推荐
51好读  ›  专栏  ›  数据分析与开发

数据存储在多张表,缓存维度如何设计?

数据分析与开发  · 公众号  · 数据库  · 2016-09-05 20:48

正文

(点击上方公众号,可快速关注)


来源:伯乐在线专栏作者 - 林松彬

链接:http://blog.jobbole.com/105322/

点击 → 了解如何加入专栏作者


概述


为了提升接口的响应速度,通常会使用中央缓存,比如增加一个memcache集群,用于存储热点数据。


假设数据表是类似下面这样的:


table a{

long id

String name

.........

.........

}

 

table b{

long id

long a_id

String name

.........

........

}

 

table c {

long id

long a_id

String content //大字段

........

........

}

 

table d{

long id

long a_id

String content//大字段

........

.......

}


表b、c、d都通过一个a_id去引用a表的记录。假设这四张表的数据需要存储到memcache上,那么memcache 缓存维度该怎么设计呢?是使用一个key,然后把所有记录存储起来呢?还是使用多个key呢?

其实都可以,根据业务场景和具体数据来决定。


使用多个key


假设你的服务接口大部分情况下只需要输出a表和b表中的数据,那就可以使用多个key。比如说,接口需要输出id=7对应的业务数据,那么key这样设计:


business_7

c_7

d_7


business_7这个key用于存储接口最经常输出的业务数据,也就是a表和b表的数据,c_7用于输出c表的数据,d_7用于输出d表的数据。这样设计基于以下几点:


1、c表和d表都有大字段,而且内容也无需经常输出,如果每次调用接口,不管对方要不要,都要从memcache中获取。大家应该知道,当数据体积比较大的时候,走网络从memcache中获取的时候,是比较慢的,会降低接口响应速度的。


2、接口调用方,最经常要使用的数据,是a表和b表中的数据。


备注:


不建议针对每张表,都去设计一个key,这样做虽然粒度比较细。但是每次接口输出数据时,都得跟memcache做很多次交互。根据我们自己的性能压测结果,只要跟memcache交互的次数多了,接口性能立马就下去了。


使用一个key


如果大部分外部系统都需要使用到表a、b、c、d的数据,那么就使用一个key即可。减少跟memcache交互的次数。



专栏作者简介 点击 → 加入专栏作者 )


林松彬:互联网技术爱好者,目前就职于广州知名电商企业。

 

打赏支持作者写出更多好文章,谢谢!




------------------ 推荐 ------------------


范品社推出了十几款程序员、电影、美剧和物理题材的极客T恤单件 ¥59.9、两件减¥12、四件减¥28,详见网店商品页介绍。


网店地址:https://fanpinshe.taobao.com/

淘口令:复制以下红色内容,然后打开手淘即可购买

范品社,使用¥极客T恤¥抢先预览(长按复制整段文案,打开手机淘宝即可进入活动内容)