OceanBase 集群通常是三副本架构,少数场景可能会使用五副本。在三副本架构下,OceanBase 集群的节点数通常是三的倍数,集群节点会分为三个区域( Zone )。每个 Zone 的节点数通常保持相等,可以有1或多个节点。每个租户的数据也会分布在这三个 Zone 里,但不一定用尽每个 Zone 的所有节点,这取决于租户资源池属性的设置,由运维人员确定。

    OceanBase 支持通过参数(parameters)来影响集群和租户的功能、性能等。集群参数通常是在sys租户里设置,影响范围是整个集群,也包括集群里的租户。同时 OceanBase 针对租户也支持用变量(variables)来设置,影响范围是当前租户。

    当第一次向 OceanBase 的表中修改一笔数据时,OceanBase 会将该记录所在的块读入到内存中的一块只读区域中,然后在另外一块内存区域记录一笔修改记录。前者称为基线数据(SSTable),后者称为增量数据(MemTable),对应的内存称为增量内存。无论是插入、更新还是删除,OceanBase 都不会对 SSTable 进行修改,而是在原来的增量基础上追加(append)新的增量。这种设计使得 OceanBase 的写产生的 IO 非常少,性能很好。增量会一直在内存中不落盘,直到增量内存使用率超过一定阈值后触发冻结事件(Minor freeze),此时会生成新的 MemTable 供后续写入。老的增量 MemTable 会直接转储到磁盘上,或者直接跟磁盘里的 SSTable 进行合并(Major freeze)。