知道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)