当你想在你的代码中找到一个错误时,这很难;当你认为你的代码是不会有错误时,这就更难了。

以json格式在mysql中存储数据

admin 107℃
我以为这是一个n00b的事情。所以,我从来没做过。然后我看到FriendFeed做到了这一点,实际上使他们的数据库规模更好,减少了延迟。我很好奇我是否应该这样做。如果是的话,正确的方法是什么?

基本上,学习如何将mysql中的所有内容存储为couchdb类型的db是一个好地方吗?将所有内容存储为json似乎更容易、更快(不需要构建,延迟更少)。

另外,在数据库上编辑、删除存储为json的内容是否容易?

couchdb和mysql是两种截然不同的东西。json是在couchdb中存储内容的本地方式。在mysql中,最好将json数据作为文本存储在单个字段中。这将完全违背将其存储在rdbms中的目的,并将使每个数据库事务变得非常复杂。

不要。

尽管如此,friendfeed似乎在mysql之上使用了extremely custom schema。这实际上取决于您到底想存储什么,对于如何滥用数据库系统几乎没有一个明确的答案,所以这对您来说是有意义的。考虑到这篇文章已经很老了,他们反对Mongo和Coach的主要原因是不成熟,如果MySQL不为您裁剪,我会重新评估这两个。他们现在应该长得多了。

每个评论似乎都是从错误的角度来的,通过PHP在关系数据库中存储JSON代码是很好的,它实际上会更快地加载和显示这样的复杂数据,但是你会有设计方面的考虑,例如搜索、索引等。

最好的方法是使用混合数据,例如,如果需要基于datetime进行搜索,mysql(性能优化)将比php快得多,对于搜索场馆的距离之类的内容,mysql也应该快得多(注意,搜索不是访问)。不需要搜索的数据可以存储在json、blob或任何其他您认为必要的格式中。

您需要访问的数据很容易存储为json,例如一个基本的每箱发票系统。它们从rdbms中根本没有什么好处,如果您有正确的html表单结构,它们可以通过json编码($_post['entires'])存储在json中。

我很高兴你使用MunGDB很高兴,我希望它能继续为你服务,但是不要认为MySQL总是脱离你的雷达,随着你的应用程序复杂性的增加,你最终可能需要一些功能和特性的RDBMS(即使只是用于存档归档数据或业务报告)

mysql 5.7现在支持类似于mongodb和其他无模式文档数据存储的本地json数据类型:

JSON支持

从mysql 5.7.8开始,mysql支持原生json类型。json值不是作为字符串存储的,而是使用允许快速读取文档元素的内部二进制格式。存储在json列中的json文档在插入或更新时会自动进行验证,无效文档会产生错误。json文档在创建时是规范化的,并且可以使用大多数比较运算符进行比较,例如=、<、<=、>、>=、<>、!=,和<=>;有关支持的运算符以及MySQL在比较JSON值时遵循的优先级和其他规则的信息,请参阅JSON值的比较和排序。

mysql 5.7.8还引入了许多用于处理json值的函数。这些功能包括下列功能:

  1. 创建json值的函数:json_array()、json_merge()和json_object()。参见第12.16.2节,'创建json值的函数'。
  2. 搜索json值的函数:json_contains()、json_contains_path()、json_extract()、json_keys()和json_search()。请参阅第12.16.3节,'搜索json值的函数'。
  3. 修改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值的函数'。
  4. 提供有关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、ORDERBY和GROUP BY子句。这包括select、update、delete、create table和其他sql语句。左侧必须是json列标识符(而不是别名)。右边是一个带引号的json路径表达式,它根据作为列值返回的json文档进行计算。

请参阅第12.16.3节'搜索json值的函数',了解有关->和json_extract()的更多信息。有关mysql 5.7中json路径支持的信息,请参见搜索和修改json值。另请参见辅助索引和虚拟生成列。

更多信息:

https://dev.mysql.com/doc/refman/5.7/en/json.html

json字符在存储方面没有什么特别的,比如

{ 我是说, } 我是说, [ 我是说, ] 我是说, ' 我是说, a-z 我是说, 0-9 ……没有什么特别之处,可以作为文本存储。

你要面对的第一个问题是这个

{ 资料编号:22, 用户名:'robert', 密码:'skhgeeht893htgn34ythg9er' }

除非您有自己的过程并为mysql开发了一个jsondecode,否则存储在数据库中的更新就不是那么简单了

UPDATE users SET JSON(user_data,'username') = 'New User';

因此,由于您不能这样做,您必须首先选择json,解码它,更改它,更新它,所以在理论上,您最好花更多的时间来构建一个合适的数据库结构!

我确实使用json来存储数据,但只存储元数据,数据不经常更新,与用户无关。例如,如果用户添加了一个post,并且在该post中添加了图像,则会解析图像并创建拇指,然后使用json格式的拇指url。

转载请注明:我的代码 » 以json格式在mysql中存储数据