关闭

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

发表于:2016-9-05 09:46

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Sam哥哥    来源:51Testing软件测试网采编

  概述
  为了提升接口的响应速度,通常会使用中央缓存,比如增加一个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交互的次数。
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号