新聞中心
Json數(shù)據(jù)庫在近年來的技術(shù)發(fā)展中,已經(jīng)逐漸成為廣大開發(fā)者的重要工具之一。由于其具有許多優(yōu)勢,Json數(shù)據(jù)庫現(xiàn)已廣泛應(yīng)用于各種應(yīng)用軟件和系統(tǒng)中。本文就進(jìn)行深入探討,使讀者更好地了解Json數(shù)據(jù)庫及其在實(shí)際開發(fā)中的應(yīng)用。

網(wǎng)站建設(shè)哪家好,找創(chuàng)新互聯(lián)公司!專注于網(wǎng)頁設(shè)計(jì)、網(wǎng)站建設(shè)、微信開發(fā)、微信小程序開發(fā)、集團(tuán)企業(yè)網(wǎng)站建設(shè)等服務(wù)項(xiàng)目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了邕寧免費(fèi)建站歡迎大家使用!
一、Json數(shù)據(jù)庫的優(yōu)勢
1、易于操作
Json數(shù)據(jù)庫中的數(shù)據(jù)存儲(chǔ)方式與面向?qū)ο缶幊滔嗨?。因此,它對于開發(fā)者而言非常易于操作。相較于傳統(tǒng)數(shù)據(jù)庫,Json數(shù)據(jù)庫的編寫、測試和維護(hù)相對簡單,易于使用。
2、數(shù)據(jù)結(jié)構(gòu)靈活
Json數(shù)據(jù)庫中可以存儲(chǔ)各種不同數(shù)據(jù)類型(例如字符串、數(shù)字、布爾值、數(shù)組和對象等),可以快速適應(yīng)任何數(shù)據(jù)結(jié)構(gòu)的變化。此外,Json數(shù)據(jù)庫中的數(shù)據(jù)可以隨時(shí)進(jìn)行修改、刪除或添加,并且不需要復(fù)雜的SQL語句。
3、數(shù)據(jù)可讀性強(qiáng)
由于Json數(shù)據(jù)庫中的數(shù)據(jù)格式為鍵值對,因此數(shù)據(jù)的可讀性更強(qiáng)。開發(fā)人員可以輕松地閱讀Json數(shù)據(jù)庫中存儲(chǔ)的數(shù)據(jù),而無需使用SQL查詢語句。
4、數(shù)據(jù)查詢速度快
Json數(shù)據(jù)庫的查詢速度相對較快,因?yàn)閿?shù)據(jù)存儲(chǔ)為二進(jìn)制格式,可以快速進(jìn)行數(shù)據(jù)檢索。此外,Json數(shù)據(jù)庫還支持各種索引類型(包括基于文本和基于位置的索引等不同類型),可以更快地查找數(shù)據(jù)。
5、數(shù)據(jù)存儲(chǔ)量大
Json數(shù)據(jù)庫支持NoSQL數(shù)據(jù)庫,可以處理大量數(shù)據(jù)的存儲(chǔ)和管理,而無需使用傳統(tǒng)數(shù)據(jù)庫查詢的繁瑣操作。傳統(tǒng)上,關(guān)系數(shù)據(jù)庫通常受到存儲(chǔ)數(shù)據(jù)的限制,但使用Json數(shù)據(jù)庫可以輕松地存儲(chǔ)大量的數(shù)據(jù)。
二、Json數(shù)據(jù)庫的使用原因
1、易于維護(hù)
Json數(shù)據(jù)庫的操作相對于傳統(tǒng)數(shù)據(jù)庫管理系統(tǒng),更加簡單方便。因?yàn)镴son數(shù)據(jù)庫的存儲(chǔ)格式就是普通的文本,開發(fā)者可以直接使用代碼讀取、修改、刪除或者添加數(shù)據(jù)。它無需使用復(fù)雜的SQL語句,也不需要使用特殊的數(shù)據(jù)庫訪問協(xié)議(如ODBC或JDBC)。
2、應(yīng)用場景廣泛
Json數(shù)據(jù)庫的使用場景較廣泛,適用于各種類型的應(yīng)用軟件和系統(tǒng)。例如:網(wǎng)頁應(yīng)用程序,通訊軟件,游戲等等。在這些應(yīng)用中,Json數(shù)據(jù)庫可以快速處理、存儲(chǔ)和查詢數(shù)據(jù),從而改善系統(tǒng)性能并提高用戶體驗(yàn)。
3、數(shù)據(jù)安全可靠
Json數(shù)據(jù)庫可支持?jǐn)?shù)據(jù)備份和恢復(fù)特性。如果數(shù)據(jù)在某個(gè)時(shí)刻遭到損壞或丟失,可以使用此功能恢復(fù)原始數(shù)據(jù)。此外,Json數(shù)據(jù)庫還支持?jǐn)?shù)據(jù)空間的分離,使得開發(fā)者可以輕松地控制數(shù)據(jù)的訪問權(quán)限。
4、提高工作效率
Json數(shù)據(jù)庫的操作簡單、快速,同時(shí)其靈活性極高,使開發(fā)者能夠快速開發(fā)高質(zhì)量的應(yīng)用程序。在Json數(shù)據(jù)庫的幫助下,開發(fā)者們能夠更好的完成數(shù)據(jù)管理及處理任務(wù),提高工作效率。
5、免費(fèi)開源
Json數(shù)據(jù)庫是一個(gè)開放源碼軟件,完全免費(fèi)。不需要支付任何使用費(fèi)用,并且隨著技術(shù)的發(fā)展,開源社區(qū)也在不斷完善和升級(jí) Json數(shù)據(jù)庫。
三、結(jié)論
綜上所述,Json數(shù)據(jù)庫具有易于操作、數(shù)據(jù)可讀性強(qiáng)、數(shù)據(jù)查詢速度快以及支持NoSQL數(shù)據(jù)庫等優(yōu)勢。同時(shí),Json數(shù)據(jù)庫的使用原因包括易于維護(hù)、應(yīng)用場景廣泛、數(shù)據(jù)安全可靠、提高工作效率以及免費(fèi)開源等。Json數(shù)據(jù)庫的飛速發(fā)展也為開發(fā)者們提供了更強(qiáng)的競爭力。
Json數(shù)據(jù)庫的適用環(huán)境與傳統(tǒng)的數(shù)據(jù)庫有所不同,但并不是所有的應(yīng)用程序或者系統(tǒng)都適合使用 Json數(shù)據(jù)庫。開發(fā)者們應(yīng)該充分考慮到自己的應(yīng)用場景,充分了解 Json數(shù)據(jù)庫的優(yōu)勢和限制,再謹(jǐn)慎選擇使用。
相關(guān)問題拓展閱讀:
- mysql使用什么類型存json數(shù)據(jù)?
mysql使用什么類型存json數(shù)據(jù)?
ON (JavaScriptObject Notation) 是一種輕量級(jí)的數(shù)據(jù)交換格式,主要用于傳送數(shù)據(jù)。ON采用了獨(dú)立于語言的文本格式,類似XML,但是比XML簡單,易讀并且易編寫。對機(jī)器來說易于仿悉鄭解析和生成,并且會(huì)減少網(wǎng)絡(luò)帶寬的傳輸。由于ON格式可以解耦javascript客戶端應(yīng)用與Restful服務(wù)器端的方法調(diào)用,因而在互聯(lián)網(wǎng)應(yīng)用中被大量使用。
ON的格式非常簡單:名稱/鍵值。之前MySQL版本里面要實(shí)現(xiàn)這樣的存儲(chǔ),要么用VARCHAR要么用TEXT大文本。 MySQL5.7發(fā)布后,專門設(shè)計(jì)了ON數(shù)據(jù)類型以及關(guān)于這種類型的檢索以及其他函數(shù)解析。我們先看看MySQL老版本的ON存取。
示例表結(jié)構(gòu):
CREATE TABLE json_test(
id INT,
person_desc TEXT
)ENGINE INNODB;
我們來插入一條記錄:
INSERT INTO json_test VALUES (1,'{
“programmers”:
“firstName”: “Brett”,
“l(fā)astName”: “McLaughlin”,
“email”: “aaaa”
}, {
“firstName”: “Jason”,
“l(fā)astName”: “Hunter”,
“email”: “bbbb”
}, {
“firstName”: “Elliotte”,
“l(fā)astName”: “Harold”,
“email”: “cccc”
}>,
“authors”:
“firstName”: “Isaac”,
“l(fā)astName”: “Asimov”,
“genre”: “sciencefiction”
}, {
“firstName”: “Tad”,
“l(fā)astName”: “Williams”,
“genre”:”fantasy”
}, {
“firstName”: “Frank”,
“l(fā)astName”: “Peretti”,
“genre”: “christianfiction”
}>,
“musicians”:
“firstName”: “Eric”,
“l(fā)astName”: “Clapton”,
“instrument”: “guitar”
}, {
“firstName”: “Sergei”,
“l(fā)astName”: “Rachmaninoff”,
“instrument”: “piano”
}>
}’);
那一般我們遇到這樣來存儲(chǔ)ON格式的話,只能把這條記錄取出來交個(gè)應(yīng)用程序,由應(yīng)用程
來解析備頌。如此一來陸改,ON又和特定的應(yīng)用程序耦合在一起,其便利性的優(yōu)勢大打折扣。
現(xiàn)在到了MySQL5.7,可以支持對ON進(jìn)行屬性的解析,我們重新修改下表結(jié)構(gòu):
ALTER TABLE json_test MODIFY person_desc json;
先看看插入的這行ON數(shù)據(jù)有哪些KEY:
mysql> SELECT id,json_keys(person_desc) as “keys” FROM json_test\G
*************************** 1. row***************************
id: 1
keys:
1 row in set (0.00 sec)
我們可以看到,里面有三個(gè)KEY,分別為authors,musicians,programmers。那現(xiàn)在找一
KEY把對應(yīng)的值拿出來:
mysql> SELECT json_extract(AUTHORS,’$.lastName’) AS ‘name’, AUTHORS FROM
-> (
-> SELECT id,json_extract(person_desc,’$.authors’) AS “authors” FROM json_test
->UNION ALL
-> SELECT id,json_extract(person_desc,’$.authors’) AS “authors” FROM json_test
-> UNION ALL
-> SELECT id,json_extract(person_desc,’$.authors’) AS “authors” FROM json_test
-> ) AS T1
-> ORDER BY NAME DESC\G
*************************** 1. row***************************
name:”Williams”
AUTHORS: {“genre”: “fantasy”,”lastName”: “Williams”, “firstName”:”Tad”}
*************************** 2. row***************************
name:”Peretti”
AUTHORS: {“genre”:”christianfiction”, “l(fā)astName”: “Peretti”,”firstName”:
“Frank”}*************************** 3. row***************************
name:”Asimov”
AUTHORS: {“genre”: “sciencefiction”,”lastName”: “Asimov”, “firstName”:”Isaac”}
3 rows in set (0.00 sec)
現(xiàn)在來把詳細(xì)的值羅列出來:
mysql> SELECT
->json_extract(AUTHORS,’$.firstName’) AS “firstname”,
-> json_extract(AUTHORS,’$.lastName’)AS “l(fā)astname”,
-> json_extract(AUTHORS,’$.genre’) AS”genre”
-> FROM
-> (
-> SELECT id,json_extract(person_desc,’$.authors’)AS “authors” FROM json
_test
-> ) AS T\G
*************************** 1. row***************************
firstname: “Isaac”
lastname:”Asimov”
genre:”sciencefiction”
1 row in set (0.00 sec)
我們進(jìn)一步來演示把a(bǔ)uthors 這個(gè)KEY對應(yīng)的所有對象刪掉。
mysql> UPDATE json_test
-> SET person_desc =json_remove(person_desc,’$.authors’)\G
Query OK, 1 row affected (0.01 sec)
Rows matched: 1 Changed: 1 Warnings: 0
查找下對應(yīng)的KEY,發(fā)現(xiàn)已經(jīng)被刪除掉了。
mysql> SELECT json_contains_path(person_desc,’all’,’$.authors’)as authors_exists FROM
json_test\G
*************************** 1. row***************************
authors_exists: 0
1 row in set (0.00 sec)
總結(jié)下,雖然MySQL5.7開始支持ON數(shù)據(jù)類型,但是我建議如果要使用的話,更好是把這的值取出來,然后在應(yīng)用程序段來計(jì)算。畢竟數(shù)據(jù)庫是用來處理結(jié)構(gòu)化數(shù)據(jù)的,大量的未預(yù)先定義schema的json解析,會(huì)拖累數(shù)據(jù)庫的性能。
我們知道,ON是一種輕量級(jí)的數(shù)據(jù)交互的格式,大部分NO SQL數(shù)據(jù)庫的存儲(chǔ)都用ON。MySQL從5.7開始支持ON格式的數(shù)據(jù)存儲(chǔ),并且新增了很多ON相關(guān)函數(shù)。MySQL 8.0 又閉畢帶來了一個(gè)新的把ON轉(zhuǎn)換為TABLE的函數(shù)ON_TABLE,實(shí)現(xiàn)了ON到表的轉(zhuǎn)換。
舉例一
我們看下簡單的例子:
簡單定義一個(gè)兩級(jí)ON 對象
mysql> set @ytt='{“name”:}’;Query OK, 0 rows affected (0.00 sec)
之一級(jí):
mysql> select json_keys(@ytt);+—+| json_keys(@ytt) |+—+| |+—+1 row in set (0.00 sec)
第二級(jí):
mysql> select json_keys(@ytt,’$.name’);+-+| json_keys(@ytt,’$.name’) |+-+| |+-+1 row in set (0.00 sec)
我們使用MySQL 8.0 的ON_TABLE 來轉(zhuǎn)換 @ytt。
mysql> select * from json_table(@ytt,’$.name’ columns (f1 varchar(10) path ‘$.a’, f2 varchar(10) path ‘$.b’)) as tt;
+++
| f1 | f2 |
+++
| ytt | action |
| dble | shard |
| mysql | oracle |
+++
3 rows in set (0.00 sec)
舉例二
再來一個(gè)復(fù)雜點(diǎn)的例子,碰早用的是EXPLAIN 的ON結(jié)果集。
ON 串 @json_str1。
set @json_str1 = ‘ { “query_block”: { “select_id”: 1, “cost_info”: { “query_cost”: “1.00” }, “table”: { “table_name”: “bigtable”, “access_type”: “const”, “possible_keys”: , “key”: “id”, “used_key_parts”: , “key_length”: “8”, “ref”: , “rows_examined_per_scan”: 1, “rows_produced_per_join”: 1, “filtered”: “100.00”, “cost_info”: {“read_cost”: “0.00”,”eval_cost”: “0.20”,”prefix_cost”: “0.00”,”data_read_per_join”: “176” }, “used_columns”: } }}’;
之一級(jí):
mysql> select json_keys(@json_str1) as ‘first_object’;+—+| first_object |+—+| |+—+1 row in set (0.00 sec)
第二級(jí):
mysql> select json_keys(@json_str1,’$.query_block’) as ‘second_object’;++| second_object|++| |++1 row in set (0.00 sec)
第三級(jí):
mysql> select json_keys(@json_str1,’$.query_block.table’) as ‘third_object’\G*************************** 1. row ***************************third_object: 1 row in set (0.01 sec)
第四級(jí):
mysql> select json_extract(@json_str1,’$.query_block.table.cost_info’) as ‘forth_object’\G*************************** 1. row ***************************forth_object: {“eval_cost”:”0.20″,”read_cost”:”0.00″,”prefix_cost”:”0.00″,”data_read_per_join”:”176″}1 row in set (0.00 sec)
那我們把這個(gè)ON 串轉(zhuǎn)換為表。
SELECT * FROM ON_TABLE(@json_str1,
“$.query_block”
COLUMNS(
rowid FOR ORDINALITY,
NESTED PATH ‘$.table’
COLUMNS (
a1_1 varchar(100) PATH ‘$.key’,
a1_2 varchar(100) PATH ‘$.ref’,
a1_3 varchar(100) PATH ‘$.filtered’,
nested path ‘$.cost_info’
columns (
a2_1 varchar(100) PATH ‘$.eval_cost’ ,
a2_2 varchar(100) PATH ‘$.read_cost’,
a2_3 varchar(100) PATH ‘$.prefix_cost’,
a2_4 varchar(100) PATH ‘$.data_read_per_join’
),
a3 varchar(100) PATH ‘$.key_length’,
a4 varchar(100) PATH ‘$.table_name’,
a5 varchar(100) PATH ‘$.access_type’,
a6 varchar(100) PATH ‘$.used_key_parts’,
a7 varchar(100) PATH ‘$.rows_examined_per_scan’,
a8 varchar(100) PATH ‘$.rows_produced_per_join’,
a9 varchar(100) PATH ‘$.key’
),
NESTED PATH ‘$.cost_info’
columns (
b1_1 varchar(100) path ‘$.query_cost’
),
c INT path “$.select_id”
)
) AS tt;
++——+++——+——+——+——+——+++——+——+——+——+——+——+
| rowid | a1_1 | a1_2 | a1_3 | a2_1 | a2_2 | a2_3 | a2_4 | a3 | a| a5 | a6 | a7 | a8 | a9 | b1_1 | c |
++——+++——+——+——+——+——+++——+——+——+——+——+——+
|| id | const | 100.00 | 0.20 | 0.00 | 0.00 | 176 | 8 | bigtable | const | id | 1 | 1 | id | NULL | 1 |
|| NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | NULL | 1.00 | 1 |
++——+++——+——+——+——+——+++——+——+——+——+——+——+
2 rows in set (0.00 sec)
關(guān)于為什么用使用json數(shù)據(jù)庫的介紹到此就結(jié)束了,不知道你從中找到你需要的信息了嗎 ?如果你還想了解更多這方面的信息,記得收藏關(guān)注本站。
成都網(wǎng)站設(shè)計(jì)制作選創(chuàng)新互聯(lián),專業(yè)網(wǎng)站建設(shè)公司。
成都創(chuàng)新互聯(lián)10余年專注成都高端網(wǎng)站建設(shè)定制開發(fā)服務(wù),為客戶提供專業(yè)的成都網(wǎng)站制作,成都網(wǎng)頁設(shè)計(jì),成都網(wǎng)站設(shè)計(jì)服務(wù);成都創(chuàng)新互聯(lián)服務(wù)內(nèi)容包含成都網(wǎng)站建設(shè),小程序開發(fā),營銷網(wǎng)站建設(shè),網(wǎng)站改版,服務(wù)器托管租用等互聯(lián)網(wǎng)服務(wù)。
分享文章:Json數(shù)據(jù)庫的優(yōu)勢及使用原因 (為什么用使用json數(shù)據(jù)庫)
網(wǎng)址分享:http://www.dlmjj.cn/article/codpppo.html


咨詢
建站咨詢
