我们知道高并发点查利用了短路径和 PreparedStatement 特性,都只支持主键点查,即主键如果有3列组成,那查询语句中也必须包含这3列,所谓的点查相当于 KV 查询,即根据 Key 查 Value。
但在很多业务场景中,特别是之前用 NoSQL,比如 ES/MongoDB,因为其天然不支持多表关联,很多业务都是基于单表实现的。但这些业务又不只是 KV 查询,还可以利用倒排索引、二级索引做各种类似 KV 的单表简单查询,这种单表简单查询在高并发下性能还是相当好的,比如 MongoDB 单节点就可以有几万的QPS。
当然 Doris 功能上也支持,但在单表数据量达到千亿规模,高并发按倒排索引查的场景下 QPS 只有个位数。
为什么不点查呢,因为点查限定的查询条件太严格了,无法满足业务需求。
主键模型MOW如果能够做到这样的话,我想能够吸引更多之前用 NoSQL 的用户:
- 行列混存
- 短路径,支持点查(查询条件是主键所有列)、简单查(查询条件是主键任意列,或非主键任意列,利用其前缀或倒排索引)
- PreparedStatement,支持点查、简单查
- 行缓存,支持点查、简单查
这种单表的简单查跟点查很类似,通用的查询引擎和计划对它来说可能太重了。