有没有关于odp sharding 和单元化的文档介绍?我搜索了一下,没有找到详细的关于 ODP sharding的说明文档,谁有这方面的资料?
ODP并不负责分库分表,也不作为 SQL 引擎参与执行计划的生成调度,只负责纯粹的反向代理转发。这意味着 ODP 并不具备 Sharding(分片)功能,它不会对 SQL 语句进行解析以决定数据应该被路由到哪个分片上。相反,ODP 的核心功能在于路由,即将客户端发起的数据访问请求转发到正确的 OBServer 节点上,并将 OBServer 节点的响应结果转发给客户端。
在 OceanBase 数据库中,数据的分片(Sharding)是在设计表结构时通过指定分区键来实现的。当创建表时,可以指定分区策略,比如范围分区、哈希分区等,这些策略决定了数据如何分布在不同的分区上,而每个分区可以位于不同的 OBServer 节点上。ODP 通过获取到 OBServer 节点中的数据分布信息,能够将用户的 SQL 请求高效地转发到数据所在的具体 OBServer 节点上执行。
因此,虽然 ODP 本身不执行分片逻辑,但它通过与 OceanBase 数据库的紧密协作,确保了即使是在大规模分布式环境中,用户也可以像操作单机数据库那样方便地访问数据。ODP 在这个过程中起到了至关重要的作用,它不仅简化了客户端的应用开发,还提高了系统的整体性能和可用性。
严格来说 OB 不需要分库分表,不过大规模部署时金融机构为了提高处理能力以及降低风险,使用了分库分表+OB,甚至单元化架构。这个都是企业版本客户的行为。
社区版客户即使数据量大如快手这种的,也用的是 OB 分区表。
如果想用企业版OB 的单元化能力,ODP 有参数支持分库分表。但是这个方案还需要应用和其他中间件参与设计搭配使用。这套方案比较复杂,适用于大型金融企业,普通用户不用学(学了也没用,分库分表难用死了),真要用直接找企业版售前支持去提要求。
此外,ODC 社区版近期倒是推出了逻辑库功能。可以关注看看。