在mysql中使用&搜索jsonb数据
Posted
技术标签:
【中文标题】在mysql中使用&搜索jsonb数据【英文标题】:Using & Searching through jsonb data in mysql 【发布时间】:2017-08-22 10:42:51 【问题描述】:我们之前设置了 PostgreSQL 数据库,并使用 JSONB 将我们的一些数据保存在 json 中,因为我们需要根据我们可以存储在其中的任何 JSON 来保持我们的列数据之一在本质上是动态的。我们还可以通过 JSON 键和值执行文本搜索和比较,一切都很好。
最近由于一些技术原因,我们的团队决定迁移到 mysql。所以我的问题是 MySQL 中的 JSON 是否支持像 PostgreSQL 那样的搜索,以及 MySQL 支持中的 JSON 在版本 >= MySQL 5.7.8、MySQL 中引入的稳定性如何。
【问题讨论】:
How to search JSON data in mysql?的可能重复 【参考方案1】:来自 MySQL 文档:
JSON 支持
从 MySQL 5.7.8 开始,MySQL 支持原生 JSON 类型。 JSON 值不存储为字符串,而是使用内部二进制 允许快速读取文档元素的格式。 JSON 存储在 JSON 列中的文档会自动验证 它们被插入或更新,无效文档产生 错误。 JSON 文档在创建时被规范化,并且可以进行比较 使用大多数比较运算符,例如 =、、>=、、!= 和 ;有关支持的运算符以及优先级的信息 以及 MySQL 在比较 JSON 值时遵循的其他规则,请参阅 JSON 值的比较和排序。
MySQL 5.7.8 还引入了许多用于处理的函数 JSON 值。这些功能包括此处列出的功能:
创建 JSON 值的函数:JSON_ARRAY()、JSON_MERGE() 和 JSON_OBJECT()。请参阅第 12.16.2 节,“创建 JSON 的函数 价值观”。搜索 JSON 值的函数:JSON_CONTAINS(), JSON_CONTAINS_PATH()、JSON_EXTRACT()、JSON_KEYS() 和 JSON_SEARCH()。 请参阅第 12.16.3 节,“搜索 JSON 值的函数”。职能 修改 JSON 值:JSON_APPEND()、JSON_ARRAY_APPEND()、 JSON_ARRAY_INSERT(), JSON_INSERT(), JSON_QUOTE(), JSON_REMOVE(), JSON_REPLACE()、JSON_SET() 和 JSON_UNQUOTE()。见第 12.16.4 节, “修改 JSON 值的函数”。提供的功能 有关 JSON 值的信息:JSON_DEPTH()、JSON_LENGTH()、 JSON_TYPE() 和 JSON_VALID()。请参阅第 12.16.5 节,“函数 返回 JSON 值属性”。在 MySQL 5.7.9 及更高版本中,您可以使用 column->path 作为 JSON_EXTRACT(column, path) 的简写。这有效 作为列的别名,只要列标识符可以出现在 SQL 语句,包括 WHERE、ORDER BY 和 GROUP BY 子句。这 包括 SELECT、UPDATE、DELETE、CREATE TABLE 和其他 SQL 陈述。左侧必须是 JSON 列标识符(并且 不是别名)。右侧是引用的 JSON 路径表达式 根据作为列返回的 JSON 文档进行评估 价值。
有关更多信息,请参阅第 12.16.3 节,“搜索 JSON 值的函数” 关于 -> 和 JSON_EXTRACT() 的信息。有关 JSON 的信息 MySQL 5.7 中的路径支持,请参阅搜索和修改 JSON 值。 另请参阅二级索引和虚拟生成列。
此外,我们一直在使用 MySQL 并以 JSON 格式存储数据,就性能和可扩展性而言,它运行良好。
你可以阅读更多关于它的信息:https://dev.mysql.com/doc/refman/5.7/en/json.html
【讨论】:
感谢您的更新。您能否分享到目前为止您在数据库中处理的 JSON 数据的最大大小是多少? 不确定确切的最大大小,但平均而言,我们的 json 数据每列包含大约 5-6MB 的数据,因为我们还存储图像通知 base64code 与键值。 太好了。非常感谢您的帮助。以上是关于在mysql中使用&搜索jsonb数据的主要内容,如果未能解决你的问题,请参考以下文章
在 PostgreSQL 中的 jsonb 列中搜索 json 数组,其中数据为 json 数组
如何在 Postgresql 中实现对复杂嵌套 JSONB 的全文搜索