• home > DB > mysql >

    MySQL的JSON指北(1):什么时候选择JSON存储?

    Date:

    在数据库中,JSON 类型比较适合存储一些修改较少、相对静态的数据。JSON不是字符串类型,而是一种新的类型,有自己的存储格式,还能在每个对应的字段上创建索引,做特定的优化。

    之前我们讲过《数据库设计三大范式趣解—数据库理论》,但是业务在发展过程中,或许需要扩展单个列的描述功能,这时,如果能用好 JSON 数据类型,那就能打通关系型和非关系型数据的存储之间的界限,为业务提供更好的架构选择。

    很多同学在用 JSON 数据类型时会遇到各种各样的问题,其中最容易犯的误区就是将类型 JSON 简单理解成字符串类型

    但本质上,JSON 是一种新的类型,有自己的存储格式,还能在每个对应的字段上创建索引,做特定的优化,这是传统字段串无法实现的。JSON 类型的另一个好处是无须预定义字段,字段可以无限扩展。而传统关系型数据库的列都需预先定义,想要扩展需要执行 ALTER TABLE ... ADD COLUMN ... 这样比较重的操作。

    之前如果要存储 JSON 类型的数据的话我们只能自己做 JSON.stringify() 和 JSON.parse() 的操作,而且没办法针对 JSON 内的数据进行查询操作,所有的操作必须读取出来 parse 之后进行,非常的麻烦。

    2015年 MySQL 5.7 开始支持JSON 类型,2016年8.0 版本解决了更新 JSON 的日志性能瓶颈。如果要在生产环境中使用 JSON 数据类型,强烈推荐使用 MySQL 8.0 及以上版本

    MySQL 8 大幅改进了对 JSON 的支持,添加了基于路径查询参数从 JSON 字段中抽取数据的 JSON_EXTRACT() 函数,以及用于将数据分别组合到 JSON 数组和对象中的 JSON_ARRAYAGG() 和 JSON_OBJECTAGG() 聚合函数。

    https://scriptingmysql.wordpress.com/2020/04/10/mysql-versus-mongodb-for-storing-json-documents-in-a-doc-store-database-which-is-faster/


    MysqlMongodb
    Import快得多
    创建索引快一点
    Search快得多
    Update快得多
    Delete快得多

    其是JSON_SET/JSON_REMOVE, 这个性能跟mongo差距大不。

    当然果你的应用程序需要处理大量的 JSON 数据,并且对灵活性和性能有较高要求,那么 MongoDB 可能是一个更好的选择—— MongoDB 本身就是为了处理 JSON 文档而设计的!

    在数据库中,JSON 类型比较适合存储一些修改较少、结构变化频繁、相对静态的数据。

    JSON适应场景

    以下是一些适合选择JSON类型的场

    一、数据模型灵活性需求高

    1. 数据结构变化频繁:如果数据模型经常需要更改或扩展,使用JSON类型可以更方便地适应这些变化,而无需重新设计数据库表结构。

    2. 嵌套数据结构:当数据具有嵌套结构(如对象包含对象或数组)时,JSON类型可以自然地表示这种层次关系。

    二、数据存储和查询需求特殊

    1. 半结构化数据存储:JSON适用于存储不规则、半结构化的数据,如日志文件、传感器数据等。这些数据通常不需要严格的关系型数据库模式,但需要进行有效的存储和查询。

    2. 快速原型开发:在快速原型开发或敏捷开发环境中,JSON的灵活性使得可以快速迭代和修改数据结构,从而加快开发进程。

    三、性能优化需求

    1. 减少表连接:在某些情况下,将相关数据存储在JSON字段中可以减少表的连接操作,从而提高查询性能。例如,在ERP系统中,可以将不经常查询的子表、孙表数据存储在JSON字段中,以减少表连接带来的性能开销。

      1. 减少数据表的查询和关联查询:一个查询的结果就可以代替几个查询的结果,降低数据库服务器的压力

      2. 减少数据表的设计:使用JSON类型可以减少为数据中的每个key值新建字段的需求,任意增减字段而无需修改数据表结构

    2. 空间换时间策略:虽然JSON字段的处理效率可能不及传统关系表,但在某些情况下(如数据集合较小且已精确定位到某一行时),使用JSON字段可以通过空间换时间的策略来提高整体性能。

    3. 高效存储:MySQL对JSON数据进行了优化存储,减少了冗余信息,提高了存储和查询效率

    PostgreSQL也支持JSON数据类型,并提供了JSON和JSONB两种存储格式。其中,JSONB格式对JSON数据进行了二进制存储和索引优化,可以进一步提高查询性能。

    JSON类型也缺点

    JSON类型也有一些缺点,如查询性能可能不如传统的关系型数据结构,以及索引和约束的限制。

    • 查询性能:虽然现代数据库系统已经大大提高了对JSON类型的查询性能,但在某些情况下,特别是当涉及到复杂的查询或大量数据时,JSON字段的查询性能可能不如传统的列式存储。

    • 索引支持有限:尽管一些数据库提供了对JSON字段中特定键创建索引的能力,但与普通列相比,索引的选择性和效率可能会受到限制。

    • 数据完整性:使用JSON字段可能会使确保数据完整性和一致性变得更加困难,因为数据库无法强制执行JSON内容的具体模式。

    在选择SQL数据库中的JSON类型时,需要综合考虑数据的特性、应用需求、性能优化以及数据库的支持情况。





    转载本站文章《MySQL的JSON指北(1):什么时候选择JSON存储?》,
    请注明出处:https://www.zhoulujun.cn/html/DB/mysql/2024_1012_9274.html