这是问题所在:
我们有一个MySQL数据库,用于存储JSON字符串。到目前为止,这还没有问题,但是突然,我们的客户要求我们对这些对象进行搜索/订购/其他操作。由于项目处于后期状态,团队负责人不想选择去Mongo,所以我问是否有使用这些JSON字符串的快速方法?
JSON作为意图
在MySQL中无法使用JSON。一些DBMS可能支持JSON,但这是不可能的,此外,任何此类“支持”仅是关于执行某些JSON特定的操作,而不是关于架构建模(这两个方面完全不同)。从全面的意义上讲,MySQL的模型概念(即关系)与JSON不同:作为关系DBMS,它遵循关系数据模型,而JSON则是完全不同的格式。您会将其存储为纯字符串值,因此,如果不使用字符串函数,则无法以其他方式对其进行任何处理。因此,即使使用JSON,您也不会在关系模型中执行此操作,因此,将无法维护关系功能,例如参照完整性。
解决方案
您有几种选择:
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] 删除。
我来说两句