Oceanbase partition和Tidb region相关疑问

【产品名称】

OceanBase

【产品版本】

Oceanbase 全系列

【问题描述】

  • OceanBase是使用分区表来将表拆分成多个分区(partition)
  • TiDB是在存储层按固定大小的块将表进行拆分(region)
  1. 针对表数据拆分/打散的方式,各有什么优劣?
  2. OceanBase中是否会存在类似TIDB里的region热点的问题,如果存在热点partition如何处理呢?

分库分表技术、OB的分区表技术、TiDB的存储切片技术(TiDB 3.0后也逐步支持分区表),都属于水平拆分技术。

区别在于,分库分表和分区表技术允许业务架构师根据业务特点去选择合适的拆分键和分片数。比如说淘宝电商订单库按买家或卖家id拆分为256个库1024个表,支付宝订单按会员id拆分为100库100表。而TiDB的存储切片技术是对业务方完全透明的。好处是业务不用管,坏处是业务想管管不了。

业务查询场景很多,sql条件也很多。优化肯定不能满足所有场景,要首先考虑重要的场景。所以选哪种拆分方案,按什么字段拆分,拆分为多少片,都是根据具体业务场景有关。这其中数据分布的特点很重要。业务架构师能不能干预这个分布特点很重要。设计的好,发挥线性扩展能力,就能支撑电商双11那样的业务压力;设计的不好,一个小的促销活动活动就可能把数据库打垮。

热点问题有两类。一是业务数据特点分布不均匀导致。OB的分区表可以用hash分区打散这个。一级分区不够可以选用两级分区。二是业务访问不均匀导致。比如说大账户。记录只有一笔,但是被高频访问。这个任何数据库都解决不了。只能采用一些缓解方案。比如说数据库层面读写分离、数据库前端加cache,业务排队限流降低热点行访问。

水平拆分技术的分析可以参考:https://mp.weixin.qq.com/s/pQiJZStFVfZWvRorIP49OQ

2 个赞

感谢,解惑。