各位 OceanBase 的老师和社区朋友们,大家好!
我们团队目前正在进行数据库选型,核心对比是 OpenSearch 3.10 与 OceanBase 社区版 4.3.5。我们非常倾向于选择分布式关系型数据库 OceanBase,但在评估过程中遇到一些关键疑问,希望在此请教,感谢大家!
【一、使用环境】
测试环境
【二、OB 或其他组件】
OceanBase 数据库 社区版 4.3.5
【三、问题背景/业务场景描述】
为了便于大家理解,我们先简要说明业务场景和需求:
- 业务类型:读写请求量大致相当,没有明显的读或写倾斜。
- 数据模型(Schema)特点:
- 表结构非常宽,初始有上百个字段,且未来会持续新增字段,最终可能达到上千个字段。
- 数据稀疏:不是每一行数据都会在所有列上有值,存在大量
NULL
或空值。 - 详细的表结构请见附件:
业务schema.txt (4.8 KB)
- 查询模式:
- 高自由度查询:用户可能在前端界面上任选 20 个字段甚至更多进行各种排列组合的过滤查询。
- 无法为所有可能的查询组合预先创建覆盖索引。
- 资源与性能目标:
- 核心优化目标是减少磁盘 I/O 访问(对延迟和成本敏感)。
- 硬件方面:CPU 和内存资源可以适当增加(Scale-Up)。
【四、具体疑问】
基于以上场景,我们最关心以下几个问题:
- 缓存机制:
- OpenSearch 依赖其强大的
Query Cache
,Request Cache
和文件系统缓存来加速重复查询并减少磁盘操作。 - 请问 OceanBase 有哪些内置的缓存机制(如 Block Cache/Cold Data Cache/Plan Cache 等)来最大化减少物理磁盘 I/O?
- 高性能查询方案:
- 为成百上千种字段组合都创建复合索引显然不现实。
- 除了传统的大量创建复合索引的方法外,OceanBase 是否有其他更优的技术或方案来应对这种“高自由度、多条件组合查询”场景?
- 我们了解到一些数据库有诸如倒排索引、位图索引、JSON 列索引等技术,OceanBase 对此的支持度和实践建议如何?哪种方案更适合我们这种宽表、稀疏数据的场景?