网站群数据库水平切分案例

本人查看了网站很多的资料,通过自己的理解写下了这篇文章,希望会对大家有所帮助。

本文以网站群文章系统为例。根据各自的业务需求自行调整。

随着数据量的逐步增大,数据库性能显著降低,我们就要对数据库进行扩容,这里介绍数据库水平切分的架构实践。

一、文章系统

文章是一个非常常见的业务,其核心元数据为:

Article(aid,cid,sid,status…)

其中:

  • aid为文章ID,主键。

  • cid为分类ID

  • sid为网站site_id

数据库设计上,一般来说在业务初期,单表就能够搞定这个需求,典型的架构设计为:

当数据量越来越大时,需要多文章表进行扩容:

二、分表扩容带来的问题

数据库扩容后插入、查询等操作数据需要先定位到数据所在的表:

对于aid属性上的查询可以直接定位到表,假设访问aid=666的数据,取模后能够直接定位content_0000:

对于非aid属性上的查询,例如cid、sid属性上的查询,就悲剧了:

假设访问cid=666的数据,由于不知道数据落在哪个表上,往往需要遍历所有表,当分表数量很多时,性能会显著降低。

 

三、水平切分

1、索引表法

aid能直接定位到库,cid不能直接定位到库,如果通过cid能查询到aid,问题解决。

解决方案

  • 建立一个索引表记录cid->aid的映射关系。

  • 用cid来访问时,先通过索引表查询到aid,再定位相应的表。

  • 索引表属性较少,可以容纳非常多数据,一般不需要分库。

潜在不足:多一次数据库查询,性能下降一倍。

 

2、缓存映射法

访问索引表性能较低,把映射关系放在缓存里性能更佳。

解决方案

  • cid查询先到cache中查询aid,再根据aid定位数据库。

  • 假设cache miss,扫描全库获取cid对应的uid,放入cache.

  • cid到aid的映射关系不会变化,映射关系一旦放入缓存,不会更改,无需淘汰,缓存命中率超高。

潜在不足:多一次cache查询。

 

3、基因法

什么是分库基因?

通过sid分表,假设分为16个表,采用sid%16的方式来进行数据库路由,这里的sid%16,其本质是aid的最后4个bit决定这行数据落在哪个库上,这4个bit,就是分库基因。

什么是基因法分库?

在“1对多”的业务场景,使用“1”分库,在“多”的数据id生成时,id末端加入分库基因,就能同时满足“1”和“多”的分库查询需求。

为了解决分表扩容带来的问题,我们要对网站编号sid(site_id)抽取“基因”,融入aid、cid...中:

通过基因生成的aid和cid通过最后4bit的基因我们就可以直接定位到数据所在的表。

 

总结:

若使用基因法分表扩容建议大家提前做好容量预估,一旦定型后再进行扩容时,需要从新计算基因导入数据,这点根据自己的业务需求设计。

如果查询条件不是基因生成的id,建议使用搜索服务,比如ElasticSearch。

通过基因生成的id我们可以直接定位到所在的表,减少了索引和缓存带来的不足。

 

基因抽取示例:

Java抽取基因

Php抽取基因

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 王婆卖瓜,自卖自夸----介绍我们课程的优势: l 编程语言学习,如果想要学习到核心的技术知识,就应该从原生的代码开始写,先不要去尝试熟悉框架。l 核心技术掌握在自己的手上----原生代码写的好处:发挥自己的想象力,创造出一套属于你自己的系统或软件。因为任何框架,它的规则已经定好了,他已经给你订画好了圈圈,圈圈太多,就会限制你的想象力。l 就好像幼儿园的小朋友,你告诉他,苹果是红色的,就限制了他的想象力。从此他不知道苹果可以有彩虹般的多色多彩,你告诉他写O是画一个圈圈,从此他知道圈圈读O,他不会再想象圈圈可以是太阳,也可以是月亮,还可以是星星2. 富兴SEO系统功能介绍如下: l 完全独立自主开发的CMS管理系统l 全生成全静态页面l 类似dedeCMS、帝国CMS的模板管理功能l 不限数量的子域名点l  栏目页编辑功能l 文章发布功能l 点发布功能l 支持数据批量操作(如批量导入、删除等)l robots页面生成l Sitemap网站地图功能l 文章批量伪原创功能3. 通过本系统实战练习,学员将学习到的知识(1) 系统开发能力:开发58同城、黄页88等管理系统都不是梦!(2) PHP从浅入深的实战应用① 会员管理系统开发② 留言管理系统开发③ 企业网站后台管理系统开发(3) MYSQL由浅入深的实战应用① 数据库设计讲解② 增删改查SQL语句高级应用技巧(4) 企业SEO网站上线部署实战应用① 华为云服务器LINUX环境部署② 域名解析

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值