数据库设计 - 反范式冗余

What

大学里面学习数据库的时候,要求都是要按照三范式设计。但是在互联网高并发大数据量的场景下,往往要反范式设计。

Why

因为反范式的好处是可以通过冗余存储来减少计算。

How

引入一个例子:订单业务举例

  1. 订单业务
    Order(oid, info_detail)//订单主表
    T(buyer_id, seller_id, oid)//买家,卖家关系表
  2. 数据量大怎么办?
    水平切分
  3. 如何水平切分?如何满足查询?
    Order -> oid
    T -> buyer_id, seller_id?
    订单主表很容易切分(对oid进行取模即可),可是关系表T怎么办,如果按照买家的话,买家的读问题(只需要读一个库)是解决了,可是卖家读问题(需要读取多个库)解决不了。
  4. 解决方案:冗余表
    解决什么问题?
    a. 数据量大
    b. 需要水平切分
    c. 一个schema上有多个字段的查询需求
    怎么解决?
    • 数据库层面:
      a. Order(oid, info_detail)
      b. T1(buyer_id, seller_id, oid)//买家读取数据的时候读这个表
      c. T2(seller_id, buyer_id, oid)//卖家读取数据的时候读这个表

    • 服务层面:
      方案一:服务同步冗余
      在这里插入图片描述
      方案二:服务异步冗余

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值