全局索引方案
使全局唯一性约束的实现成为了可能
OceanBase 全局索引方案使全局唯一性约束的实现成为了可能,同时在某些场景下可以避免出现使用本地索引所面临的扫描“所有”索引分区所带来的性能和资源浪费问题。
行业现状及痛点
很多分布式数据库并不具备全局索引功能
虽然业内有很多分布式数据库,但全局索引功能却并不是一个标配,很多大家所熟悉的分布式数据库产品(如 MongoDB、Cassandra、Hbase 等)并不提供全局索引功能,只有少数产品才能提供,比如 Google F1 / Spanner 和 CouchBase,这也从一个侧面印证了在分布式数据库中实现全局索引的难度,目前 OceanBase 已实现了全局索引的功能
索引和主表数据分跨机器访问时的效率问题
全局索引面临的最大挑战就是分布式事务的网络延迟和多次日志落盘,而这种物理开销是没有办法完全消除的。
OceanBase 使用了经过改良的两阶段提交方法,和传统的两阶段提交相比会有更少的网络交互次数以及更少的写日志次数,在很大程度上缩短了分布式事务的处理时间,提高了全局索引的处理效率
分布式数据库中全局数据一致性问题
OceanBase 在全局范围内实现了“快照隔离级别”和“多版本并发控制”的能力,保证了在机器间有时钟差异的情况下,仍能维持时间戳(即版本号)在全局范围内的前后一致性。
具体可查阅“全局数据一致性解决方案”
方案架构
在分布式数据库中,每一个数据分区和索引分区可以分布在不同的数据节点上。
以 employee(员工信息表)来举例,employee 表按照 emp_id 做了范围分区,同时在 emp_name 上做了全局分区索引,如上图所示。
方案优势
实现全局唯一性约束
由于本地索引只处理一个主表分区的数据,因此只能在一个主表分区内保证索引键的“唯一性约束”,无法在全表范围内保证索引键的唯一性约束。但是,在这一点上全局索引可以完全做到
减少性能和资源浪费问题
我们要求分区的排序规则和索引树的排序规则一致。这意味着无论是针对固定键值的索引扫描,还是针对一个键值范围的索引扫描,都可以直接定位出需要扫描的一个或者几个分区,而不是像本地索引一样盲目地在所有分区上扫描