想象你在经营一家社区小卖部:一台收银机、一个账本,生意再好也扛不住整条街的顾客同时涌进来。更麻烦的是,哪天突然停电、收银机死机,账本还会弄丢。2010年,蚂蚁集团面对双11的海量交易,就是这种“小卖部被海啸冲垮”的处境。于是他们决定自建一种全新的“超级连锁超市”——OceanBase。这家超市由几十家分店组成,每家分店都存着同样的一本账。某几家分店着火、断网,其他分店照样开门,账目一本不差。它的秘密武器是“店长投票”:每一笔账都要所有分店店长投票表决,超过半数同意才记入账本。为了不让几亿顾客在超市里踩踏,它把货架按“分区”摆到各家分店,每家只管一小部分商品;它既能像收银台一样快速结账,又能像总部财务一样随时统计全集团财报——这就是"HTAP"。

岗位关联

一句话职业价值:看懂OceanBase,等于掌握了金融级高并发系统的“抗震设计图纸”,是架构师和DBA从单机时代迈入分布式时代的必修课。

目录
  1. 可视化演示
  2. 诞生背景:双11的海啸把小卖部冲垮了
  3. 架构总览:连锁超市的集团骨架
  4. Paxos共识:店长投票选出可信决策
  5. 分布式事务:跨柜台订单的原子性
  6. 分区机制:货架分区的摆放艺术
  7. HTAP能力:零售批发两不误
  8. 存储引擎:仓库的高效存货法
  9. 对比与选型:三家超市怎么选
  10. AI 应用场景
  11. Python 演示
  12. 常见误区
  13. 面试题

可视化演示

交互展示Paxos多副本共识协议、分区数据分布及HTAP统一存储引嵌架构,插示OceanBase高可用与强一致性核心设计。

本节配有交互动效(进入视口后自动加载,约 3KB)。

Paxos多副本共识 Leader发起Prepare提议 多数Follower响应Promise N=2F+1容忍F个节点 三阶段保证强一致性

诞生背景:双11的海啸把小卖部冲垮了

想象你开了一家社区小卖部,平时一天几百个顾客,收银台一台计算机就够用。突然有一天全城大促销,几千万人同时涌进你的小店——收银台前排起长龙,计算机直接死机,账本还差点弄丢。这就是2009年第一次双11时,传统数据库遇到的真实困境:交易量是指数级增长的,而单台“收银机”(数据库服务器)的算力却跟不上。

蚂蚁集团发现,花钱买再大的机器也赶不上剁手党增长的速度。2010年,一群工程师决定从零自研OceanBase。2014年它跑通第一条交易,2017年扛下双11全部流量,2021年对外开源。它不是把一个大数据库拆开,而是天然就设计成多台普通服务器协作的集群,这就是“分布式数据库”的起点。

传统数据库依赖单机算力,扩展靠“换更大的机器”(纵向扩展),贵且天花板明显。OceanBase采用“多台普通服务器组成集群”(横向扩展),数据切片存储、多副本冗余,单机故障不丢数据。双11峰值每秒几十万笔订单,OceanBase都能稳稳接住,靠的就是这套架构。

所以OceanBase从诞生起就想着“把小卖部开成连锁超市”:用多副本机制把MTTR压到最低,让可用性逼近99.99%。双11再大的海啸冲过来,这家超市也能照常结账。

可用性=MTBFMTBF+MTTR×100%\text{可用性}=\frac{\text{MTBF}}{\text{MTBF}+\text{MTTR}}\times 100\%
可用性就是“一年里能正常营业的时间占比”。MTBF是平均多久才坏一次,MTTR是坏了多久能修好。
  1. MTBF(平均故障间隔)两次宕机之间的平均正常工作时间。小卖部的收银机半年才死机一次,MTBF就很大。
    MTBF\text{MTBF}
  2. MTTR(平均修复时间)一次故障后恢复营业所需的平均时间。维修工半小时到场,MTTR就小。
    MTTR\text{MTTR}
  3. 可用性比值分子是“能干活的时间”,分母是“能干活+在修的时间”,比值越高越接近“永不停业”。
    MTBFMTBF+MTTR\frac{\text{MTBF}}{\text{MTBF}+\text{MTTR}}

架构总览:连锁超市的集团骨架

连锁超市集团有个明显特点:不是在一条街上开一个超级大店,而是在城市各区开很多分店,每家分店规模适中,但合在一起覆盖全城。OceanBase的架构也是如此。它的基本部署单位叫Zone(可用区),可以理解为一个城市片区;每个Zone里有若干台OBServer节点,也就是一个分店。数据不会只放在一个Zone里,而是同时存到多个Zone的多台OBServer上。

每家分店都存着一份完整的账本副本,这样即使某个Zone因为地震、断电整体“关门”,其他Zone的分店还能继续营业。那多份副本之间怎么保证账目一致?靠的就是后面要讲的Paxos协议。此外,整个集团还有一个“总调度室”——RootService,它负责管理分区的分配、副本的放置和故障后的自动切换。

从高可用设计上看,OceanBase并不要求所有分店都活着才能营业。只要多数派分店存活,系统就能继续提供读写服务。这就是为什么它能做到“城市级容灾”:一个Zone整体不可用,流量自动转移到另一个Zone,业务几乎无感知。

这套“集团骨架”意味着:你不需要买一台超级计算机,而是用一堆普通服务器拼出高可用。每当新开一家分店(扩容节点),RootService会像区域经理一样,把部分货架(分区)调拨过去,让每家分店的负载大致均衡。

R⩾2f+1R \geqslant 2f+1
数据副本数 R 和可容忍故障节点数 f 的关系:想要容忍 f 台机器同时宕机,至少需要 2f+1 个副本。
  1. f(可容忍故障数)允许同时挂掉的节点数量。比如允许1个Zone出事,f=1。
    ff
  2. 2f+1(最小副本数)多数派机制下,要保证总能凑出多数,副本数必须大于故障数的两倍。
    2f+12f+1
  3. R≥2f+1(副本配置)实际副本数要不少于这个下限。3副本能容忍1个故障,5副本能容忍2个。
    R⩾2f+1R \geqslant 2f+1

Paxos共识:店长投票选出可信决策

假设连锁超市的店长们要决定下周进货单。如果每个店长各写各的,账目必然对不上。Paxos协议就是一套“店长投票规则”:先选出一个Leader(主店长),由他发起提案,其他店长(Follower)收到后表态“同意”或“拒绝”,超过半数同意,提案才算通过。

OceanBase的Paxos实现有几个关键设计。首先是Leader选举:所有节点通过心跳互相探测,发现当前Leader失联就发起新一轮选举,得票过半的新节点成为Leader,避免“脑裂”(两个店长同时发号施令)。其次是日志复制:Leader把写操作记成一条日志,广播给各副本,副本收到后回执确认。最后是多数派提交:只要超过半数的副本确认了这条日志,写入就算成功,不需要等所有副本都写完。

你可能敏锐地发现:5个节点的集群,3个确认就能提交;但如果Leader自己挂了怎么办?没关系——剩下的4个节点中仍然能选出新Leader,而新Leader的数据一定包含了已提交的日志,因为任何已提交的日志都在至少一个存活节点上。这正是“多数派”的精妙之处。

回到超市比喻:店长投票规则保证了“只要多数店长点头,进货单就生效”,而且即使有两家分店联系不上,其他三家也能照常决策。这就是OceanBase数据不丢、服务不停的核心秘密。

quorum=⌊n2⌋+1\text{quorum}=\left\lfloor \frac{n}{2} \right\rfloor + 1
quorum 就是“法定票数”:n个节点的集群,超过一半(向下取整再加一)才够数。
  1. n(节点总数)参与投票的分店数量,比如5。
    nn
  2. n/2 向下取整先算出一半是多少。5的一半是2.5,向下取整得2。
    ⌊n2⌋\left\lfloor \frac{n}{2} \right\rfloor
  3. 加1得法定票数在2的基础上加1得到3,即5节点集群需要3票才能提交。
    ⌊n2⌋+1\left\lfloor \frac{n}{2} \right\rfloor + 1

分布式事务:跨柜台订单的原子性

顾客在连锁超市买东西,可能同时要结账、积分、开票——分别发生在三个柜台。要么三个柜台都成功,要么全部取消,绝不能出现“钱扣了但积分没加”的情况。在分布式数据库里,这个需求叫分布式事务,OceanBase用两阶段提交(2PC)来解决。

两阶段提交里有个角色叫协调者(相当于总收银台),参与者是各个分店。第一阶段叫“准备”:协调者问所有参与者“这笔账能不能记?”参与者各自把数据锁住、写入日志,回答“准备好了”。第二阶段叫“提交”:协调者收到所有参与者的“准备好了”后,广播“正式提交”,大家才真正落账。只要有一个参与者回答“不行”,协调者就广播“回滚”,大家把之前的准备全部撤销。

OceanBase还引入了全局时间戳(GTS)来给所有事务拍序号,确保分布式事务的先后顺序和真实时间一致。配合MVCC(多版本并发控制),读操作可以读取某个时间点的快照,读写互不阻塞,隔离级别默认支持“可重复读”。

用超市的话说:收银员不会在所有柜台都点头前就盖章,也不会在某个柜台摇头后还强行结算。这套“全员确认再落账”的机制,保证了顾客无论跨几个柜台,账单永远一致。

∀ p∈P: state(p)=prepared  ⟹  commit\forall\, p \in P:\ \text{state}(p)=\text{prepared}\implies \text{commit}
意思:只有当集合P中每一个参与者都处于“已准备”状态,才能提交。
  1. P(参与者集合)参与这笔跨柜台事务的所有分店。
    PP
  2. state(p)=prepared每个分店的状态都必须是“准备好了”。
    state(p)=prepared\text{state}(p)=\text{prepared}
  3. 蕴含提交前件成立则后件成立——全票准备就提交,否则回滚。
    ∀ p∈P: state(p)=prepared  ⟹  commit\forall\, p \in P:\ \text{state}(p)=\text{prepared}\implies \text{commit}

分区机制:货架分区的摆放艺术

超市不可能把几亿件商品堆在一个仓库里。它会把商品按品类、按品牌分到不同货架,甚至不同分店。OceanBase也是这么干的:一张数据表被拆成很多个分区(Partition),每个分区是表的一部分数据,各自存储在不同的OBServer上。

常见的分区方式有两种。Range分区:按某个列的范围来切,比如订单表按时间分成“2024年1月分区”“2024年2月分区”,查询某个月的数据时只需要扫对应分区。Hash分区:对主键做哈希运算,然后对分区数取模,把数据均匀打散到各个分区,适合订单号、用户ID这类没有自然顺序的键,能有效避免热点集中在某一个分片。

分区还带来一个巨大好处:水平扩展。当集群压力增大时,不需要换更大的机器,只要增加新的OBServer,RootService就会把部分分区迁移过去。整个过程对应用透明,业务侧完全无感知。

像超市把同一位顾客的订单按用户ID哈希到同一家分店,查询和事务都在本店完成,减少了跨店沟通成本。分区就是OceanBase能“无限扩容”的货架系统。

shard=h(key) mod N\text{shard} = h(\text{key}) \bmod N
一致性哈希的核心:对某个键(如用户ID)做哈希,再对总分片数N取模,决定它落到哪个货架。
  1. key(分区键)用来决定数据去哪分区的依据,比如用户ID。
    key\text{key}
  2. h(key)(哈希函数)把任意长的键变成固定范围数字的“搅拌机”。
    h(key)h(\text{key})
  3. mod N(取模分桶)搅拌出的数字对分区数取余,把键均匀塞进N个桶。
    h(key) mod Nh(\text{key}) \bmod N

HTAP能力:零售批发两不误

普通超市只做零售,总部想要一份全集团财报,得等各分店下班后盘货上报,第二天才能出来。OceanBase的"HTAP"就像一家既做零售、又同时给餐厅做批发的超市:同一套门店,既能服务进店顾客,又能随时给大客户出批发报价。

在数据库术语里,TP(事务处理)是零售——大量小额、高频的读写,比如转账、下单;AP(分析处理)是批发——复杂的大查询、聚合统计,比如“上月华东区销售额TOP10”。传统方案是搭一套ETL管道,把交易数据同步到数仓再分析,滞后至少一天。OceanBase则在一套引擎里同时支持两者。

实现上,OceanBase用行存格式服务TP:一行数据连续存放,改一笔快;同时用列存格式服务AP:一列数据连续存放,扫全表做聚合快。数据以两种格式各存一份,通过内部同步机制保持一致。查询优化器会根据SQL类型自动选择行存或列存,应用无感知。

这家“双模式超市”的价值在于:业务方不需要把数据搬来搬去,在交易发生的同时就能看到实时分析结果,风控、运营决策因此从“隔天报表”变成“实时驾驶舱”。

CPUTP+CPUAP≤CPUcluster\text{CPU}_{\text{TP}}+\text{CPU}_{\text{AP}}\leq \text{CPU}_{\text{cluster}}
HTAP不是无代价的:交易负载和分析负载共享同一份计算资源,必须做好资源隔离与限流。
  1. CPU_TP处理零售交易(转账、下单)占用的CPU。
    CPUTP\text{CPU}_{\text{TP}}
  2. CPU_AP处理批发分析(聚合报表)占用的CPU。
    CPUAP\text{CPU}_{\text{AP}}
  3. ≤CPU_cluster(总配额)两者之和不能超过整个集群的算力,否则互相拖累,需要靠租户隔离、限流等手段做“分时分区”。
    CPUTP+CPUAP≤CPUcluster\text{CPU}_{\text{TP}}+\text{CPU}_{\text{AP}}\leq \text{CPU}_{\text{cluster}}

存储引擎:仓库的高效存货法

超市仓库有一套聪明的摆放策略:销量最高的商品放在门口,补货频繁的商品放在最外层,定期把滞销商品推到仓库深处。OceanBase的存储引擎LSM-Tree(Log-Structured Merge Tree)也是这个思路。

传统数据库用B+树,数据写入时要随机修改磁盘上的多个位置,像在仓库里来回搬货,慢。LSM-Tree则先把所有写入都记到一个内存表(MemTable)里,攒够一批后,再以顺序写的方式一次性刷到磁盘。顺序写比随机写快一到两个数量级,相当于超市把补货商品先堆在收货区,凑满一卡车再统一运进仓库。

随着刷盘次数增多,磁盘上会形成多层SSTable(有序数据文件),查询时可能需要查多层文件。为了加速,OceanBase给每个文件建了布隆过滤器(Bloom Filter):一个紧凑的“可能含有”名单,快速排除不含目标数据的文件,避免无效扫描。同时,数据块采用压缩存储,节省磁盘又加速IO。

LSM-Tree就是OceanBase的“仓储物流系统”:收货区快速收货,仓库按层堆放,门口放提示牌(布隆过滤器)快速找货。这套设计让它在高并发写入场景下依然保持稳定吞吐。

Write Amplification=物理写入量逻辑写入量\text{Write Amplification}=\frac{\text{物理写入量}}{\text{逻辑写入量}}
写放大衡量“实际写盘”与“应用要求写”的比值。LSM-Tree通过顺序写降低随机IO,但压缩合并会带来写放大,需要权衡。
  1. 逻辑写入量业务层认为写入的数据大小,比如1KB。
    逻辑写入量\text{逻辑写入量}
  2. 物理写入量磁盘实际写入的数据大小,包括多次刷盘、后台合并产生的额外写入。
    物理写入量\text{物理写入量}
  3. 比值物理/逻辑越接近1越好,但压缩合并总有额外开销,好的LSM实现会控制这个比值。
    物理写入量逻辑写入量\frac{\text{物理写入量}}{\text{逻辑写入量}}

对比与选型:三家超市怎么选

现在市面上有三家著名的“分布式超市”:TiDB、Spanner和OceanBase。理解它们的差异,就像理解沃尔玛、Costco和本地精品超市的区别——各有各的客群和打法。

TiDB是开源的NewSQL代表,采用Raft协议,用Go和Rust开发,社区活跃、文档友好,适合互联网公司快速上手。Spanner是Google的全球分布式数据库,靠GPS原子钟和TrueTime机制实现跨洲强一致,适合谷歌这种全球规模业务,但技术门槛高、不开源。OceanBase从蚂蚁双11的金融场景打磨出来,跑过最严苛的账户、交易类负载,兼容MySQL协议,且开源。

选型建议:金融、政务、运营商这类对数据一致性和可靠性要求极高的核心系统,OceanBase的Paxos和HTAP能力最契合;互联网业务如果追求开源生态和快速迭代,TiDB更顺手;如果业务本身就是全球多活的超大规模,则需要考虑Spanner思路的云原生方案。

没有最好的超市,只有最合适的超市。做选型时,先画出你的业务地图:数据要放在几个城市?对一致性要求多高?团队熟悉哪种生态?答案自然浮现。

---

tread≈2dct_{\text{read}}\approx \frac{2d}{c}
光速限制是不可突破的:跨区域读取的延迟大约等于信号往返一次的时间。Spanner跨大洲同步注定延迟高,OceanBase单地域内优势明显。
  1. d(跨区域距离)数据所在两个城市之间的距离(米)。
    dd
  2. c(光速)信号传输速度约3×10⁸米/秒。
    cc
  3. 2d/c(往返时间)同步数据至少需要一次性写入传播到远端,再等确认返回。
    2dc\frac{2d}{c}

AI 应用场景

场景1:支付核心链路扛住“双11”洪峰

阶段:数据存储与高可用架构

解决的问题:传统集中式数据库在每秒几十万笔交易的高压下无法横向扩展,且单点故障会直接中断支付。OceanBase通过分区将订单按用户ID哈希打散到数千台服务器,再用Paxos多副本实现故障自动切换,保证数据零丢失、服务不中断。

具体案例:某支付平台将交易流水表按用户ID做Hash分区,双11当天峰值流量是平日的百倍。OceanBase在3个Zone的5副本上实时确认事务,2台数据库节点宕机后,系统在30秒内自动切换流量,用户无感知。

场景2:金融实时风控的HTAP驾驶舱

阶段:实时数据分析与决策

解决的问题:传统风控需要把交易库同步到数仓再分析,延迟数小时,无法拦截实时欺诈。OceanBase的行列混合存储让风控规则直接跑在交易库上,毫秒级返回分析结果。

具体案例:某银行反欺诈系统用OceanBase的行存服务转账事务,同时用列存引擎实时跑“高频小额交易聚类”统计,将可疑交易识别时间从2小时压缩到3秒。

场景3:国产化改造中的数据库选型

阶段:系统迁移与适配

解决的问题:政企单位面临国外数据库替换需求,但担心迁移风险和团队学习成本。OceanBase兼容MySQL协议,支持在线迁移工具,降低了替换门槛。

具体案例:某省社保系统将核心账户数据从商业数据库迁移到OceanBase,通过工具完成全量+增量同步,切换时业务中断仅5分钟,上线后可用性达99.995%。

Python 演示

python61 行
"""模拟 OceanBase 的 Paxos 多数派提交机制"""import random  class PaxosNode:    """模拟一个数据库节点(分店)"""     def __init__(self, node_id):        self.node_id = node_id        self.accepted_value = None        self.available = True     def fail(self):        self.available = False     def recover(self):        self.available = True     def accept(self, value):        if self.available:            self.accepted_value = value            return True        return False  class PaxosCluster:    """模拟一个 5 节点 Paxos 集群"""     def __init__(self, node_count=5):        self.nodes = [PaxosNode(i) for i in range(node_count)]        self.quorum = node_count // 2 + 1     def propose(self, value):        """Leader 发起一次提案,返回 (是否提交, 确认节点列表)"""        votes = []        for node in self.nodes:            if node.accept(value):                votes.append(node.node_id)        committed = len(votes) >= self.quorum        return committed, votes     def kill(self, count):        """按顺序让前 count 个节点宕机"""        for i in range(count):            self.nodes[i].fail()  def run_demo():    cluster = PaxosCluster(5)    cluster.kill(2)    ok, votes = cluster.propose("转账 100 元")    print(f"宕机 2 台后提交结果: {ok}, 确认节点: {votes}")     cluster2 = PaxosCluster(5)    cluster2.kill(3)    ok2, votes2 = cluster2.propose("转账 200 元")    print(f"宕机 3 台后提交结果: {ok2}, 确认节点: {votes2}")  if __name__ == "__main__":    run_demo()
目的:模拟5节点Paxos集群在不同故障数量下的提交结果,直观演示“多数派可提交、超半数故障则无法提交”的容错边界。
  1. self.quorum = node_count // 2 + 1计算法定票数,5节点就是3票。
  2. def accept(self, value)节点投票逻辑:只有存活的节点才会接受提案。
  3. committed = len(votes) >= self.quorum确认数达到多数派才算提交成功。
  4. cluster.kill(2)模拟2台节点宕机后,剩余3台仍能提交。
  5. cluster2.kill(3)模拟3台节点宕机后,确认数不足3票,提交失败。

常见误区

误区我一直以为OceanBase就是把MySQL拆成很多份,然后用一个中间件路由,跟ShardingSphere差不多。

正解分库分表是“应用层拆表”,把一张表人工拆到多个数据库实例,跨库查询和分布式事务要自己处理。OceanBase是原生分布式数据库,从存储、事务到SQL引擎都为分布式设计,分区对应用透明,内置Paxos复制、分布式事务和全局一致性,复杂度在数据库内部消化。

为何常见:很多团队先经历过“分库分表”的过渡方案,看到OceanBase也提分区,就自然套用了旧经验。

误区Paxos走多数派,只要还有1个节点活着,账本就应该还在吧?

正解多数派指的是“写入时必须复制到超过半数的节点并确认,才算提交”。5节点集群要3个节点确认才能提交,所以最多容忍2个节点故障。若3个节点同时宕机,存活节点凑不出多数派,无法选举新Leader,集群会拒绝写入以保护一致性。

为何常见:把“多副本”直观类比成“多备份”,认为备份越多越不怕坏,忽略了多数派是“过半可用”而非“任意存活”。

误区OceanBase的HTAP,应该就是给普通表加一个列存索引,MySQL也有类似功能。

正解OB的HTAP采用行列混合存储:同一份数据以行存和列存两种物理格式各存一份,分析查询直接走列存引擎,且通过一致性视图读到最新数据,不是简单的“索引”。HTAP的关键难点在资源隔离与事务一致性,防止分析查询拖垮在线交易,需要租户隔离、CPU配额等手段。

为何常见:单机数据库的“列存索引”概念先入为主,让人低估了HTAP在分布式下的工程复杂度。

误区OceanBase兼容MySQL协议,把建表语句和业务代码原封不动搬过去就能上线。

正解兼容不等于完全等价。部分SQL函数、DDL行为、优化器特性存在差异,且分布式架构下必须重新设计分区键,否则可能产生大量跨节点事务,性能急剧下降。上线前要做全量SQL兼容性审计和压测。

为何常见:官方文档强调兼容性,容易让人忽视“分布式改造”这一真正的核心工作量。

误区每次写入要复制到多个副本,写性能岂不是变成单机的三分之一甚至五分之一?

正解Paxos采用多数派确认,5节点只需3个副本确认即可返回,不是等全部副本。OceanBase还做了批量提交(group commit)、日志异步回放等优化,实际写入吞吐远高于“全同步”模型。副本多换来的高可用,代价远小于直觉。

为何常见:人们默认“写多份”就是串行写多次,忽略了Paxos的并行确认和批量优化机制。

面试题

Q1. OceanBase起源于哪家公司的业务场景?

单选题 · easy

  • A.腾讯社交业务
  • B.阿里电商业务← 正确答案
  • C.百度搜索业务
  • D.字节推荐业务

答案:B。OceanBase由蚂蚁集团(阿里系)自研,源于双11海量交易场景。可以把OceanBase理解为被“双11剁手潮”逼出来的超级超市。腾讯、百度、字节都没有这个业务起源。

Q2. OceanBase的多副本数据一致性依赖哪种协议?

单选题 · easy

  • A.Raft共识协议
  • B.Paxos共识协议← 正确答案
  • C.两阶段提交协议
  • D.拜占庭容错协议

答案:B。OceanBase采用Paxos协议保证多副本一致,5节点中多数派确认即可提交,类似店长投票。Raft是TiDB等使用的共识协议。两阶段提交解决的是单次跨节点事务原子性,不是副本一致性。

Q3. OceanBase存储引擎采用的核心数据结构是什么?

单选题 · easy

  • A.B+ 树结构
  • B.LSM 树结构← 正确答案
  • C.哈希索引结构
  • D.跳表节点结构

答案:B。OceanBase使用LSM-Tree(日志结构合并树),先把写入缓冲到内存表,再顺序刷盘,像超市先把补货堆在收货区。B+树是传统单机数据库的存储结构,哈希索引和跳表只是局部辅助结构。

Q4. 5节点Paxos集群最多能容忍几个节点同时故障?

单选题 · mid

  • A.一个节点故障
  • B.两个节点故障← 正确答案
  • C.三个节点故障
  • D.四个节点故障

答案:B。法定票数quorum=⌊5/2⌋+1=3,写入需要3个节点确认,所以最多允许2个节点同时宕机。这就像店长投票:5位店长只要有3位在线就能决策。

Q5. OceanBase中数据水平拆分的最小逻辑单元是什么?

单选题 · mid

  • A.独立数据库
  • B.逻辑分区← 正确答案
  • C.单张数据表
  • D.存储引擎

答案:B。OceanBase把一张表按分区键拆成多个Partition(分区),每个分区存储在不同OBServer上,分区才是水平扩展的最小单元。数据库和表是逻辑容器,存储引擎是底层实现,都不直接决定数据如何拆分。

Q6. 关于两阶段提交(2PC)的说法,正确的是?

单选题 · mid

  • A.协调者直接提交事务
  • B.参与者各自提交事务
  • C.协调者先询问再提交← 正确答案
  • D.参与者自行决定结果

答案:C。2PC分两阶段:协调者先问所有参与者“准备好了吗”,全部回复准备完成后再广播提交。就像总收银台必须等所有柜台都说“可以”才统一落账。直接提交或各自提交都会破坏原子性。

Q7. OceanBase实现HTAP的两套存储格式是什么?

单选题 · mid

  • A.行存与B树格式
  • B.列存与哈希格式
  • C.行存与列存格式← 正确答案
  • D.表存与索引格式

答案:C。HTAP是“一份数据、两种格式”:行存服务高频交易,列存服务分析聚合,相当于超市同时做零售和批发。B树、哈希、索引都是局部机制,不是HTAP的存储主格式。

Q8. 与单机数据库相比,OceanBase具备哪些核心能力?

多选题 · hard

  • A.多副本自动故障切换← 正确答案
  • B.数据水平无限扩展← 正确答案
  • C.分布式事务强一致← 正确答案
  • D.单机性能三倍提升

答案:ABC。A对应Paxos多副本高可用,B对应分区机制与水平扩展,C对应分布式事务与全局时间戳,这三项是核心分布式能力。D不是设计目标——OceanBase强在横向扩展而非单纯单机性能,且“三倍提升”没有依据。

Q9. 关于OceanBase的Paxos实现,说法正确的有?

多选题 · hard

  • A.多数派节点确认即提交← 正确答案
  • B.少数派节点宕机不影响← 正确答案
  • C.选举与复制流程分离← 正确答案
  • D.需要全部节点参与投票

答案:ABC。A正确,5节点中3个确认即可提交;B正确,少于半数的故障不影响集群;C正确,OB将Leader选举和日志复制分成独立流程便于工程实现。D错误,多数派而非全量投票。

Q10. 关于OceanBase与Spanner的对比,哪些描述正确?

多选题 · extreme

  • A.Spanner依赖原子钟GPS← 正确答案
  • B.OB在单地域内延迟更低← 正确答案
  • C.Spanner有全球多活能力← 正确答案
  • D.OB可跨全球强一致同步

答案:ABC。A正确,Spanner利用TrueTime(GPS+原子钟)实现全球一致性;B正确,OceanBase的Paxos在单地域内网络往返短,延迟更低;C正确,Spanner设计目标就是全球多活。D错误,OceanBase的强一致布局通常在城市级或地域级,跨全球强一致方案不如Spanner成熟。