提到实时数据分析,很多人第一反应是Apache Druid或者ClickHouse。但如果你接触过需要毫秒级延迟、复杂关联查询、以及半结构化数据处理的场景,会发现这些传统列式存储引擎总有些别扭。要么是join能力弱得让人抓狂,要么是数据摄入后要等半天才能查到。Rockset的出现,恰好补上了这个夹缝。

我第一次注意到Rockset,是因为它打出的口号——"SQL on real-time data,不用预先定义schema"。这句话翻译成人话就是:你把一堆乱七八糟的JSON、CSV、甚至Kafka流直接丢进去,它能立刻让你用标准的SQL去查询,不用提前建表、不用手动清洗、不用为字段类型纠结。对做数据平台的人来说,这简直就是解放生产力的福音。
Rockset的底层存储架构很有意思,它没有走纯列存或者纯行存的老路,而是搞了一套叫"RocksDB + 列式索引"的混合方案。RocksDB提供高吞吐的写入能力,每个文档进来后先落在这里,保证数据不丢。紧接着,系统异步生成三种索引:倒排索引、列式索引、还有向量索引。倒排索引负责全文搜索和字段级过滤,列式索引承担聚合分析的重任,向量索引则给那些搞AI检索的团队留了后路。三种索引并存,意味着同一个查询,优化器会挑最快的那条路走。
这里就得聊聊性能了。Rockset官方的基准测试里,它能在秒级摄入数据的同时,对TB级别的数据集跑出亚秒级的聚合查询。这个成绩怎么来的?关键在于它的分布式架构把"写入"和"查询"彻底解耦了。写入节点只管把数据切分、复制、落盘,查询节点则各自维护自己的索引副本。你往集群里加节点,吞吐量和并发查询能力几乎线性增长。不像某些数据库,加机器只能解决存储问题,查询瓶颈还是卡在原地。
不过,光快还不够,实时数据分析最怕的是"数据到了但查不到"。Rockset用的是一种叫"converged indexing"的机制,数据写入后会在几百毫秒内完成索引构建,然后立刻对查询可见。你从Kafka里塞进来的每条日志,几乎实时就能在SQL里跑出来。有个做风控的朋友跟我提过,他们以前用Elasticsearch做规则引擎,数据延迟在十几秒级别,换成Rockset后,延迟压到了几百毫秒,一些突发交易模式能当场抓住。
但Rockset也不是没有槽点。它最被人诟病的是成本。因为每个数据都要同时维护三种索引,存储开销比传统列存高不少。而且它默认把每个分片都做三副本复制,虽然容错性强了,但账单上的数字也蹭蹭涨。小团队如果数据量不大,可能感觉不明显;一旦到了几十TB的规模,月成本可能比同体量的ClickHouse贵出两三倍。所以它更适合那种"数据重要、查询复杂、延迟敏感"的业务,而不是拿来存冷数据搞离线分析。
另一个容易被忽视的点是它的SQL语法。Rockset对标准SQL的支持相当完整,包括窗口函数、数组操作、地理空间函数,甚至能直接对嵌套的JSON对象做路径查询。这比Druid那套半吊子SQL好用太多。但正因为它功能多,优化器在复杂join场景下偶尔会犯迷糊。比如三张表以上的大表join,如果没做好字段类型对齐,执行计划可能走偏,查询时间从几十毫秒飙到好几秒。好在他们文档里给出了不少调优建议,照着做基本能绕开这些坑。
从生态兼容性来看,Rockset提供了标准的REST API和JDBC驱动,意味着你现有的BI工具、Jupyter Notebook、甚至Metabase都能直接连上去。它还内置了跟Kafka、Kinesis、S3的集成,数据管道搭建起来很省事。有个做用户行为分析的产品经理告诉我,他们之前用Lambda架构把流式和批式数据分开处理,维护两套Pipeline苦不堪言。后来把实时部分切到Rockset,离线部分还是用Spark,整个架构瞬间清爽了不少。
回到标题说的"利器"二字,我理解它指的是两件事:一是对数据工程师来说,它是解决实时查询痛点的工具;二是对业务方来说,它让"数据驱动决策"从一个口号变成了能在几秒内跑出结果的动作。Rockset不是万能的,它不会取代数据仓库,也不会干掉所有OLAP引擎。但在那些需要"数据刚进来就要立刻剖析"的场景里,它确实是把快刀。至于这把刀值不值那个价,就得看你的业务有多依赖实时性了。至少目前来看,在云原生的实时分析赛道上,Rockset的架构思路和技术深度,都值得持续关注。


