【选型咨询】关于 OceanBase 4.3.5 在高自由度多字段查询场景下的性能与方案咨询

各位 OceanBase 的老师和社区朋友们,大家好!

我们团队目前正在进行数据库选型,核心对比是 OpenSearch 3.10 与 OceanBase 社区版 4.3.5。我们非常倾向于选择分布式关系型数据库 OceanBase,但在评估过程中遇到一些关键疑问,希望在此请教,感谢大家!

【一、使用环境】
测试环境

【二、OB 或其他组件】
OceanBase 数据库 社区版 4.3.5

【三、问题背景/业务场景描述】

为了便于大家理解,我们先简要说明业务场景和需求:

  1. 业务类型:读写请求量大致相当,没有明显的读或写倾斜。
  2. 数据模型(Schema)特点
  • 表结构非常宽,初始有上百个字段,且未来会持续新增字段,最终可能达到上千个字段
  • 数据稀疏:不是每一行数据都会在所有列上有值,存在大量 NULL 或空值。
  • 详细的表结构请见附件:
    业务schema.txt (4.8 KB)
  1. 查询模式
  • 高自由度查询:用户可能在前端界面上任选 20 个字段甚至更多进行各种排列组合的过滤查询。
  • 无法为所有可能的查询组合预先创建覆盖索引。
  1. 资源与性能目标
  • 核心优化目标是减少磁盘 I/O 访问(对延迟和成本敏感)。
  • 硬件方面:CPU 和内存资源可以适当增加(Scale-Up)。

【四、具体疑问】

基于以上场景,我们最关心以下几个问题:

  1. 缓存机制
  • OpenSearch 依赖其强大的 Query Cache, Request Cache 和文件系统缓存来加速重复查询并减少磁盘操作。
  • 请问 OceanBase 有哪些内置的缓存机制(如 Block Cache/Cold Data Cache/Plan Cache 等)来最大化减少物理磁盘 I/O?
  1. 高性能查询方案
  • 为成百上千种字段组合都创建复合索引显然不现实。
  • 除了传统的大量创建复合索引的方法外,OceanBase 是否有其他更优的技术或方案来应对这种“高自由度、多条件组合查询”场景?
  • 我们了解到一些数据库有诸如倒排索引、位图索引、JSON 列索引等技术,OceanBase 对此的支持度和实践建议如何?哪种方案更适合我们这种宽表、稀疏数据的场景?

1、 ** OceanBase 有哪些内置的缓存机制**
(Block Cache(块缓存)、 Block Index Cache(缓存微块的索引)、row cache(行缓存)、 plan Cache(执行计划缓存)、location cache(用于缓存数据副本所在的位置)、schema cache(用于缓存表的schema信息)、bloom filter cache(用于缓存静态数据的bloomfilter,快速过滤空查)等等
2、
在传统关系型数据库中,B-Tree、Hash 等索引主要针对结构化数据的精确值查询(如数字、日期等)。但在实际业务中,随着半结构化数据(如JSON文档)、非结构化文本(日志、长文本)以及多维分析场景的普及,OceanBase 提供两类特殊索引:

  • 全文索引:基于倒排索引实现,通过分词技术对文本内容建立关键词映射,适用于日志分析、文档检索等场景
  • 多值索引:针对 JSON 数组字段建立元素级索引,将数组展开为虚拟行记录并构建 B-Tree 索引,显著提升集合数据查询效率。
    可以在看看官方的文档
    https://www.oceanbase.com/docs/common-oceanbase-database-standalone-1000000003577294

看你前面的说明,以为你要选数据存储方案。但是看你后面的需求,感觉你要选的是数据分析方案。这两个可以同时拥有啊,什么技术做什么事情呗。没有东西是适合所有业务场景的,可以考虑存、算、查分离的。个人觉得需求可变性越大的业务,越适合多选择几种处理方案并行。

尝试对字符串类型建立全文索引、组合索引方式,但是发现没效果,因为我们一个查询会用很多个字段去查询,总会存在回表的情况,所以较慢。同一个这种多字段查询opensearch的查询要比ob快十几倍。

有道理,但是我们这资源比较有限,产品线线既要又要,所以不能部署多个中间件方案去支持。 :joy:

那就果断 ob 了啊,对于这种全面型需求,尽量选择短板最少的。ob 虽然以分析型功能没那么强,但是一般使用一点问题没有的,存储那就更不用说了,属于全能型选手了。如果用其他分析型服务将来如果万一要做数据仓库的话,面对联机事务处理、存储扩容、运维管理等等,都要方便一丢丢~


一个小弟打天下~

嗯嗯,我们会将对比结果提供给产线,让产线抉择。