-
数据库设计的时候,有些时候可考虑横向分表,把不常用,占用空间多,并且这张表的数据可能超过千万级别,这种情况吧一个表分成基础表和拓展表,可以明显的提高数据检索效率,Btree 的结构决定每行的数据越少,每页能放的行数越多,数据结构就越矮胖,查询效率就越高
-
纵向分表也是一种常见的策略,用类似的也可以分库
比如通过Id的访问拆分
比如通过hash模运算拆分
比如通过一致性哈希算法拆分 -
读写分离也是常见提高数据库查询能力的方式
-
浏览器缓存静态资源是一种重要的缓存方式,用户端的资源相对来说不容易有瓶颈,http相应头expires 和 cache-control 是设置缓存的重要参数
expires 设置到期时间点
cache-control 设置多久以后过期 -
互联网应用用户分布在全国各地,需要CDN网络缓存资源加速,如果企业内部用的我们可以考虑ngxin缓存静态资源
-
考虑缓存的情况应该是不常变化,高频率使用的数据,并且缓存会一定程度的带来数据不一致,这是使用缓存需要考虑的一个点
-
通过id范围分库分表,会导致尾部热点问题
分表为例:预估10亿数据,分10 份,0-1亿放表1,1-2亿放表2,一次类推。必定有一个统一的地方维持Id生成,正常Id应该是递增的,如果我们写到1.5亿的时候,表2所在的数据库一般就压力就比较大。要解决这个问题我们可以轮询的生成10个区间的递增数据,比如第一次生成1,第二次生成1亿零1,第三次生成两亿01,这样能解决热点问题,或者直接是不通过范围分配,直接通过hash来分配储存位置,hash模或者hash环
-
分库分表的情况雪花算法之类的与生成Id,比自增Id更加适合。