有没有办法在SQL中使用json对象

马里奥·斯托伊洛夫(Mario Stoilov)

这是问题所在:

我们有一个MySQL数据库,用于存储JSON字符串。到目前为止,这还没有问题,但是突然,我们的客户要求我们对这些对象进行搜索/订购/其他操作。由于项目处于后期状态,团队负责人不想选择去Mongo,所以我问是否有使用这些JSON字符串的快速方法?

阿尔玛·杜(Alma Do)

JSON作为意图

在MySQL中无法使用JSON。一些DBMS可能支持JSON,但这是不可能的,此外,任何此类“支持”仅是关于执行某些JSON特定的操作,而不是关于架构建模(这两个方面完全不同)。从全面的意义上讲,MySQL的模型概念(即关系)与JSON不同:作为关系DBMS,它遵循关系数据模型,而JSON则是完全不同的格式。您会将其存储为纯字符串值,因此,如果不使用字符串函数,则无法以其他方式对其进行任何处理。因此,即使使用JSON,您也不会在关系模型中执行此操作,因此,将无法维护关系功能,例如参照完整性。

解决方案

您有几种选择:

  • 迁移到Postgree SQL,因为它已扩展了对json的支持,从9.4版开始,它是jsonb,而且速度更快。这可能是最好的选择,因为它是RDBMS,因此迁移不会像真正面向文档的DBMS那样困难。
  • 或在为时已晚之前立即迁移到Mongo(如果您打算这样做)。考虑到,Mongo与RDBMS完全不同,它是面向文档的。我想这对您的项目和客户都是最好的选择(而您的任务就是对此进行解释)
  • 更改整个体系结构,这样就不会存储JSON对象,并且可以使用规范化的实体(就关系数据库而言)。这意味着-是的,所有代码的整体重构,更改所有关系等。在实际情况下,这只是理论上的选择,您将不会因此而浪费时间或金钱。
  • 为MySQL实现您自己的JSON库。难吗?取决于您对JSON的处理方式,但是JSON是公共格式,因此至少您会知道该怎么做。您可以将其作为UDF或在用户区域执行(因此可以使用CREATE FUNCTION语句)。当然,这将需要特定的技能和时间。坏事:错误。即使您能够比重新构建架构或迁移到Mongo更快地创建这些功能,也永远不会确定这些功能的质量。没有办法在本地测试该代码。但是,我可能会提供一些有关用户级功能的提示-mysql-unit如果您的MySQL是5.6或更高版本,您可以使用它来测试存储的代码(好吧,我已经编写了此工具,但是..它也可能包含错误)

“标准”功能

最后,如果您正在运行MySQL 5.7,那么预发布的JSON函数可能会带来一线希望-因此,您可以尝试使用alfa-version的JSON功能,该功能目前适用于MySQL 5.7。但是,我不(强烈)建议在实际项目中使用该功能,因为这些功能既未经过充分测试也不完整。但是,要安装这些功能,您需要下载相应的软件包,然后将其插入服务器,例如:

CREATE FUNCTION json_append       RETURNS string  SONAME 'libmy_json_udf.so';
CREATE FUNCTION json_valid        RETURNS integer SONAME 'libmy_json_udf.so';
CREATE FUNCTION json_extract      RETURNS string  SONAME 'libmy_json_udf.so';
CREATE FUNCTION json_replace      RETURNS string  SONAME 'libmy_json_udf.so';
CREATE FUNCTION json_remove       RETURNS string  SONAME 'libmy_json_udf.so';
CREATE FUNCTION json_set          RETURNS string  SONAME 'libmy_json_udf.so';
CREATE FUNCTION json_merge        RETURNS string  SONAME 'libmy_json_udf.so';
CREATE FUNCTION json_search       RETURNS string  SONAME 'libmy_json_udf.so';
CREATE FUNCTION json_contains_key RETURNS integer SONAME 'libmy_json_udf.so';

之后,您将可以尝试它们。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

有没有办法在SQL中使用json对象

来自分类Dev

有没有办法从JSON对象移除图层?

来自分类Dev

有没有办法在gnuplot中使用通配符?

来自分类Dev

有没有办法在MongoDB中使用HQL?

来自分类Dev

有没有办法在JavaScript中使用C ++?

来自分类Dev

有没有办法在tbl中使用重塑?

来自分类Dev

有没有办法在querySelector中使用*?

来自分类Dev

有没有办法在React中使用Wavify?

来自分类Dev

有没有办法在gnuplot中使用通配符?

来自分类Dev

有没有办法使用OpenScad拉伸对象

来自分类Dev

有没有办法在Phalcon中使用新的PostgreSQL 9.3 JSON运算符?

来自分类Dev

有没有办法在EF Core Postgres JSON中使用列表?

来自分类Dev

有没有办法在SQL HANA的TO_DATE函数中使用REPLACE函数

来自分类Dev

有没有办法使用Angularjs在HTML元素中显示数组json对象

来自分类Dev

有没有办法在较旧的C / C ++编译器中使用C ++ 11线程对象

来自分类Dev

有没有办法可以在 SQL Server 中使用中文字符创建 NVARCHAR 列的内容的哈希?

来自分类Dev

有没有办法在Berkshelf中使用私有git仓库

来自分类Dev

有没有办法查看演示文稿演示中使用的所有形状?

来自分类Dev

有没有办法在 Spring 中使用带有延迟事件的 ApplicationEventPublisher?

来自分类Dev

有没有办法清除JavaScript中的对象?

来自分类Dev

有没有办法覆盖`{}`对象?

来自分类Dev

有没有办法让numpy矩阵存储对象?

来自分类Dev

有没有办法使地图对象重复?

来自分类Dev

有没有办法从方法中调用对象?

来自分类Dev

有没有办法调整Cowplot对象的主题?

来自分类Dev

有没有办法在Dart中克隆对象?

来自分类Dev

有没有办法在Dart中克隆对象?

来自分类Dev

有没有办法动态导入Python对象?

来自分类Dev

有没有办法在Javascript中组合对象

Related 相关文章

  1. 1

    有没有办法在SQL中使用json对象

  2. 2

    有没有办法从JSON对象移除图层?

  3. 3

    有没有办法在gnuplot中使用通配符?

  4. 4

    有没有办法在MongoDB中使用HQL?

  5. 5

    有没有办法在JavaScript中使用C ++?

  6. 6

    有没有办法在tbl中使用重塑?

  7. 7

    有没有办法在querySelector中使用*?

  8. 8

    有没有办法在React中使用Wavify?

  9. 9

    有没有办法在gnuplot中使用通配符?

  10. 10

    有没有办法使用OpenScad拉伸对象

  11. 11

    有没有办法在Phalcon中使用新的PostgreSQL 9.3 JSON运算符?

  12. 12

    有没有办法在EF Core Postgres JSON中使用列表?

  13. 13

    有没有办法在SQL HANA的TO_DATE函数中使用REPLACE函数

  14. 14

    有没有办法使用Angularjs在HTML元素中显示数组json对象

  15. 15

    有没有办法在较旧的C / C ++编译器中使用C ++ 11线程对象

  16. 16

    有没有办法可以在 SQL Server 中使用中文字符创建 NVARCHAR 列的内容的哈希?

  17. 17

    有没有办法在Berkshelf中使用私有git仓库

  18. 18

    有没有办法查看演示文稿演示中使用的所有形状?

  19. 19

    有没有办法在 Spring 中使用带有延迟事件的 ApplicationEventPublisher?

  20. 20

    有没有办法清除JavaScript中的对象?

  21. 21

    有没有办法覆盖`{}`对象?

  22. 22

    有没有办法让numpy矩阵存储对象?

  23. 23

    有没有办法使地图对象重复?

  24. 24

    有没有办法从方法中调用对象?

  25. 25

    有没有办法调整Cowplot对象的主题?

  26. 26

    有没有办法在Dart中克隆对象?

  27. 27

    有没有办法在Dart中克隆对象?

  28. 28

    有没有办法动态导入Python对象?

  29. 29

    有没有办法在Javascript中组合对象

热门标签

归档