知道mysql已经支持json格式。mongodb的便利性,给开发带来了新的视角。原来扩展性还能这么简单。数据的存储还能用json格式。 可是一直尚未利用这个特性。最近在公司的项目中,有一个需求是配置钉钉的权限。按照常规的设计,得是用多表来实现。可是用过mongodb的我,想采用json格式的形式来存储。这样也能得到比较好的扩展性。 一开始我觉得能够直接用fast中的JSonObjec来存储字段。发现仍是得用String来存。之后能够探索一下可不能够这样操做。可能如今的一些框架对于这种格式的存储仍是不够完美。mysql
getConfigJson setConfigJson
若是这种方式好的话,能够推广起来。可是我如今也只是刚刚起步。 下面记录一下若是字段类型为json的话,在数据库中查询的话,应该怎么查询。sql
mysql> create table user ( uid int auto_increment, -> data json,primary key(uid))engine=innodb; Query OK, 0 rows affected (0.01 sec) mysql> insert into user values (NULL, -> '{"name":"David","mail":"jiangchengyao@gmail.com","address":"Shangahai"}'); Query OK, 1 row affected (0.00 sec) mysql> insert into user values (NULL,'{"name":"Amy","mail":"amy@gmail.com"}'); Query OK, 1 row affected (0.00 sec)
支持索引:经过虚拟列的功能能够对JSON中的部分数据进行索引mongodb
能够看到咱们新建了表user,而且将列data定义为了JSON类型。这意味着咱们能够对插入的数据作JSON格式检查,确保其符合JSON格式的约束,如插入一条不合法的JSON数据会报以下错误: mysql> insert into user values (NULL,"test"); ERROR 3130 (22032): Invalid JSON text: "Invalid value" at position 2 in value (or column) 'test'.
此外,正如前面所说的,MySQL 5.7提供了一系列函数来高效地处理JSON字符,而不是须要遍历全部字符来查找,这不得不说是对MariaDB dynamic column的巨大改进:数据库
mysql> select jsn_extract(data, '$.name'),jsn_extract(data,'$.address') from user; +-----------------------------+-------------------------------+ | jsn_extract(data, '$.name') | jsn_extract(data,'$.address') | +-----------------------------+-------------------------------+ | "David" | "Shangahai" | | "Amy" | NULL | +-----------------------------+-------------------------------+ 2 rows in set (0.00 sec)