88.9 倍性能飙升!JSON Shredding 让 JSON 查询告别全表扫描| Milvus Week

AITNT-国内领先的一站式人工智能新闻资讯网站
# 热门搜索 #
88.9 倍性能飙升!JSON Shredding 让 JSON 查询告别全表扫描| Milvus Week
6490点击    2025-12-02 10:17

88.9 倍性能飙升!JSON Shredding 让 JSON 查询告别全表扫描| Milvus Week


本文为Milvus Week系列第一篇,该系列旨在分享Zilliz、Milvus在系统性能、索引算法和云原生架构上的创新与实践,以下是DAY1内容划重点:


- 传统JSON 格式数据处理效率与灵活性难以兼顾


- JSON Shredding 通过把高频键拆分为独立的类型化列,混合类型的键拆分为动态列,稀疏低频键汇总到共享键存储并配套建立倒排索引,做到了效率与灵活性兼备。


现代应用,从微服务到物联网设备再到以JSON output为标准配置的AI应用,都在源源不断地产生海量的 JSON 或类 JSON 格式的半结构化数据。


对此,传统的处理方式主要有两种:


1.完全解析成固定表:将所有可能的字段提前定义好。这虽然能获得不错的查询性能,但一旦数据格式发生变化,就需要繁琐的 DDL 变更,灵活性极差。


2.将整个 JSON 存储为单个字段(如 JSON 列)或者 使用Milvus 的 Dynamic Schema 功能:虽然增加了灵活性,但需要以牺牲一定的查询性能为代价。每次查询都需要在运行时解析 JSON,并进行全表扫描,当数据量庞大时,响应速度会急剧下降。


痛点一句话概括,就是灵活性与效率不能兼得


那么有什么办法能够解决这个两难困境?


答案就是今天Milvus正式推出的JSON Shredding 功能,它能将无模式数据的灵活性与列式存储的查询性能完美结合,做到鱼与熊掌兼得。


01 

JSON Shredding 的工作原理


JSON Shredding 的核心思路是 动态列式存储。它结合了 JSON Shredding 和 Shared Key Index 技术,整个过程对用户完全透明,你只需要正常插入 JSON 数据,系统会在背后自动完成所有繁重的工作。


其具体工作流程是:系统接收结构灵活的原始 JSON 记录,然后对其中的键做频率、类型稳定性、稀疏度的分析;接着将类型固定的高频键拆分为独立的类型化列,混合类型的键拆分为动态列,这两类数据都会存为Arrow/Parquet 列存格式;而稀疏低频键则汇总到共享键存储并配套建立倒排索引。


详情如下图所示:


88.9 倍性能飙升!JSON Shredding 让 JSON 查询告别全表扫描| Milvus Week


第一步:JSON 拆分与列化


这是JSON Shredding 的核心,是带来性能提升的关键。


当一个新的 JSON 文档被写入时,系统会将其拆分


  • 将一些稠密的键值对自动识别为独立的列。


  • 如果遇到嵌套的 JSON 对象,系统会将其扁平化,并自动生成合理的列名(例如,user 对象下的 name 字段可能被存储为 /user/name)


  • 对于稀疏的一些键值对,系统会将其汇总全部放在一列共享列中,并对其做一些优化,针对其稀疏性,建立key 的倒排索引,实现对稀疏值的快速过滤。


第二步:动态列管理


这是实现灵活性的关键。


  • 列自动创建:相同Key 的数据被重排放置在同一列中,实现列存的计算优势。系统会自动推断新字段的数据类型(如 INTEGERDOUBLEVARCHAR 等),并为其选择高效的列式存储格式。


  • Json 中的任意一个Key 都会被分析处理,对于查询具有较强的通用性,可以覆盖用户的所有查询,不需要用户自己创建key,也不需要提前构建索引等。


第三步,优化查询


  • 如果你的查询条件或目标字段是已经被拆分成独立列的,查询引擎会直接扫描这些高度优化的列式数据。这样的好处是速度够快,一方面数据扫描量大幅减少,另一方面通过SIMD 的列式计算可以进一步优化效率。


  • 如果你的查询条件没有被单独成列,那基本表明这些要查询的键值对是稀疏的,系统直接在Shared 列中查找,由于已经有基于Key 的倒排,也能很快定位这些查询Key 哪些行中,过滤大部分没有命中的行。带来性能的提升。


  • 系统会自动维护全局的数据字典和元信息,确保即使数据格式无论如何变化,查询都能被正确、高效地执行。


02 

Benchmark 评测


我们设计了一个基准测试,对比原生JSON与 JSON Shredding 在处理半结构化数据时的查询性能:


  • 方案A(原生 JSON 字段):将整个 JSON 存储在一个字段中。


  • 方案B(我们的 JSON Shredding ):本次发布的新功能。


测试环境:


  • 测试硬件:1core8G


  • 测试数据:JSONBench 1百万数据


  • 测试方法:测试不同查询的 QPS 及 延迟


选取几个典型的场景


1.查询的key 可以被shredding 成单独列 (稠密数据)


88.9 倍性能飙升!JSON Shredding 让 JSON 查询告别全表扫描| Milvus Week


2.查询的key 没有shredding 成单独的列 (稀疏数据)


88.9 倍性能飙升!JSON Shredding 让 JSON 查询告别全表扫描| Milvus Week


无论稀疏还是稠密的key 查询,得益于前面提到的优化方法,在shredding 的作用下都具有较大的性能提升。


03 

即刻体验


无论面对的是 API 日志、物联网传感器数据,还是快速迭代的产品特性, JSON Shredding 功能都能为你提供“既要又要”的体验。


这项新功能现已上线,查看以下详细教程,即可开始使用。JSON Shredding | Milvus Documentation:https://milvus.io/docs/zh/json-shredding.md#Parameter-tuning


作者介绍


88.9 倍性能飙升!JSON Shredding 让 JSON 查询告别全表扫描| Milvus Week

张露

Zilliz Staff Software Engineer


文章来自于“Zilliz”,作者 “张露”。

AITNT-国内领先的一站式人工智能新闻资讯网站
AITNT资源拓展
根据文章内容,系统为您匹配了更有价值的资源信息。内容由AI生成,仅供参考
1
AI工作流

【开源免费】字节工作流产品扣子两大核心业务:Coze Studio(扣子开发平台)和 Coze Loop(扣子罗盘)全面开源,而且采用的是 Apache 2.0 许可证,支持商用!

项目地址:https://github.com/coze-dev/coze-studio


【开源免费】n8n是一个可以自定义工作流的AI项目,它提供了200个工作节点来帮助用户实现工作流的编排。

项目地址:https://github.com/n8n-io/n8n

在线使用:https://n8n.io/(付费


【开源免费】DB-GPT是一个AI原生数据应用开发框架,它提供开发多模型管理(SMMF)、Text2SQL效果优化、RAG框架以及优化、Multi-Agents框架协作、AWEL(智能体工作流编排)等多种技术能力,让围绕数据库构建大模型应用更简单、更方便。

项目地址:https://github.com/eosphoros-ai/DB-GPT?tab=readme-ov-file



【开源免费】VectorVein是一个不需要任何编程基础,任何人都能用的AI工作流编辑工具。你可以将复杂的工作分解成多个步骤,并通过VectorVein固定并让AI依次完成。VectorVein是字节coze的平替产品。

项目地址:https://github.com/AndersonBY/vector-vein?tab=readme-ov-file

在线使用:https://vectorvein.ai/付费