 嵌(qian)入式數據庫:存(cun)儲與管理(li)智能設備數據
							時間:2024-09-04      來源:華清遠見
							嵌(qian)入式數據庫:存(cun)儲與管理(li)智能設備數據
							時間:2024-09-04      來源:華清遠見 
							數(shu)(shu)(shu)(shu)(shu)(shu)據(ju)(ju)(ju)(ju)庫是一(yi)個(ge)有組織的(de)(de)(de)數(shu)(shu)(shu)(shu)(shu)(shu)據(ju)(ju)(ju)(ju)集合(he), 支持存(cun)儲(chu)(chu)(chu),管理和(he)(he)檢索數(shu)(shu)(shu)(shu)(shu)(shu)據(ju)(ju)(ju)(ju)。使用(yong)數(shu)(shu)(shu)(shu)(shu)(shu)據(ju)(ju)(ju)(ju)庫的(de)(de)(de)主要(yao)目的(de)(de)(de)是為了更為高效的(de)(de)(de)管理大量數(shu)(shu)(shu)(shu)(shu)(shu)據(ju)(ju)(ju)(ju),確保數(shu)(shu)(shu)(shu)(shu)(shu)據(ju)(ju)(ju)(ju)的(de)(de)(de)完整性(xing)和(he)(he)安全性(xing),允許用(yong)戶更為快(kuai)捷的(de)(de)(de)訪問和(he)(he)操作數(shu)(shu)(shu)(shu)(shu)(shu)據(ju)(ju)(ju)(ju)。數(shu)(shu)(shu)(shu)(shu)(shu)據(ju)(ju)(ju)(ju)庫根(gen)據(ju)(ju)(ju)(ju)其存(cun)儲(chu)(chu)(chu)方式(shi)的(de)(de)(de)種類(lei),分為關(guan)(guan)系(xi)數(shu)(shu)(shu)(shu)(shu)(shu)據(ju)(ju)(ju)(ju)庫和(he)(he)非關(guan)(guan)系(xi)數(shu)(shu)(shu)(shu)(shu)(shu)據(ju)(ju)(ju)(ju)庫。關(guan)(guan)系(xi)數(shu)(shu)(shu)(shu)(shu)(shu)據(ju)(ju)(ju)(ju)庫主要(yao)是存(cun)儲(chu)(chu)(chu)一(yi)些(xie)(xie)結構性(xing)的(de)(de)(de)內容,以(yi)表(biao)格的(de)(de)(de)形式(shi)存(cun)儲(chu)(chu)(chu)數(shu)(shu)(shu)(shu)(shu)(shu)據(ju)(ju)(ju)(ju),例如:MySQL,Oracle,Microsoft SQL Server等,非關(guan)(guan)系(xi)數(shu)(shu)(shu)(shu)(shu)(shu)據(ju)(ju)(ju)(ju)庫則是存(cun)儲(chu)(chu)(chu)一(yi)些(xie)(xie)非結構性(xing)的(de)(de)(de)內容,例如文檔(dang)類(lei)型的(de)(de)(de)數(shu)(shu)(shu)(shu)(shu)(shu)據(ju)(ju)(ju)(ju)格式(shi),圖片(pian)類(lei)型的(de)(de)(de)數(shu)(shu)(shu)(shu)(shu)(shu)據(ju)(ju)(ju)(ju)格式(shi),例如MarkLogic,Neo4j,Bigtable在(zai)嵌入(ru)式(shi)領域中。關(guan)(guan)系(xi)型數(shu)(shu)(shu)(shu)(shu)(shu)據(ju)(ju)(ju)(ju)庫應用(yong)比較多(duo),因為存(cun)儲(chu)(chu)(chu)的(de)(de)(de)大多(duo)都(dou)是設備(bei)數(shu)(shu)(shu)(shu)(shu)(shu)據(ju)(ju)(ju)(ju),其以(yi)表(biao)格的(de)(de)(de)形式(shi)存(cun)儲(chu)(chu)(chu)數(shu)(shu)(shu)(shu)(shu)(shu)據(ju)(ju)(ju)(ju),易于理解和(he)(he)管理,可拓展性(xing)高,易維護,占用(yong)空間小(xiao)等特點,更適合(he)嵌入(ru)式(shi)開發。
需要明確的一(yi)點是,并不是所(suo)有(you)(you)的關系(xi)型(xing)數據庫都適合嵌(qian)入式(shi)開(kai)發(fa),嵌(qian)入式(shi)開(kai)發(fa)更注重輕量級,靈活(huo)性和穩定性,所(suo)以(yi)SQLlite,MYSQL在(zai)嵌(qian)入式(shi)系(xi)統(tong)中(zhong)最為常用。SQlite以(yi)其輕量級,但文件存儲,無需服(fu)務(wu)器,被廣泛應用于移動設備(bei),物聯網設備(bei)等場合。MYSQL以(yi)其強大的功能(neng),良好的性能(neng),更適用于較(jiao)為復雜(za)的嵌(qian)入式(shi)系(xi)統(tong)。這兩款系(xi)統(tong)都支(zhi)持SQL命令,都擁有(you)(you)強大的社區資(zi)源(yuan),所(suo)以(yi)學習起來還是比較(jiao)簡單的。
下面就從數(shu)據庫的介紹(shao),特點,應用場合(he)分(fen)別介紹(shao)兩(liang)款數(shu)據庫:
SQLite的歷史:
2000 -- D. Richard Hipp 設計 SQLite 是為了不需要(yao)管理(li)即可操作程序。
2000 -- 在八月,SQLite1.0 發布(bu) GNU 數據(ju)庫管理器(GNU Database Manager)。
2011 -- Hipp 宣布,向 SQLite DB 添(tian)加(jia) UNQl 接口,開(kai)發(fa) UNQLite(面(mian)向文檔的數據庫)。
	
圖(tu)1-1 sqlite數據庫(ku)
SQLite特點:
1. SQLite是一(yi)個進程(cheng)內的數(shu)據庫,實(shi)現了自(zi)給(gei)自(zi)足(zu),無服務器支(zhi)撐的SQL數(shu)據庫引擎(qing),近幾年來SQLite用戶增長最快,用戶選(xuan)擇sqlite的主要目(mu)的是因為:
2. 不需要(yao)一個單獨的(de)服(fu)務器(qi)進程或操作的(de)系統(無服(fu)務器(qi)的(de))。
3. SQLite 不(bu)需(xu)要(yao)配置,這(zhe)意味著不(bu)需(xu)要(yao)安(an)裝或管理。
4. 一(yi)個完整的 SQLite 數據庫是(shi)存儲在一(yi)個單一(yi)的跨平(ping)臺的磁盤文件。
5.SQLite 是(shi)非常小(xiao)的,是(shi)輕量級的,完全配置時(shi)小(xiao)于 400KiB,省略可(ke)選功能配置時(shi)小(xiao)于250KiB。
6. SQLite 是自(zi)給自(zi)足的,這意味著不需要任何(he)外部的依賴。
7. SQLite 事務是完全(quan)兼容 ACID 的,允(yun)許從(cong)多個(ge)進(jin)程或線程安全(quan)訪問。
8. SQLite 支持 SQL92(SQL2)標準的(de)大多數(shu)查詢語言的(de)功能(neng)。
9. SQLite 使用(yong) ANSI-C 編(bian)寫(xie)的,并提供了(le)簡單和(he)易于使用(yong)的 API。
10. SQLite 可在 UNIX(Linux, Mac OS-X, Android, iOS)和 Windows(Win32, WinCE, WinRT)中運行。
SQLite命令:
SQLite命令,以(yi)’ . ’作(zuo)為開頭,例如.table查看有(you)哪(na)些表,.schema查看表的結(jie)構,這(zhe)些命令主要在SQLite軟件中(zhong)使用,如圖1-2以(yi)Linux系統所示:
	
圖1-2 sqlite軟件的使(shi)用
SQLite支(zhi)持SQL命令,例如CREATE創建,INSERT插(cha)入,SELECT查詢,UPDATE更新(xin),DELETE刪(shan)除(chu)等,其(qi)SQL命令可以在SQLite軟件中(zhong)使用(yong),如圖1-3以Linux系統所示:
	
圖1-3 sqlite軟(ruan)件的使用
也可(ke)以(yi)(yi)在代碼中調用sqlite提供的(de)API,如圖1-4所示,相關API接口可(ke)以(yi)(yi)參考sqlite官網:
//www.sqlite.org/c3ref/funclist.html,如圖1-5所示(shi)。
	
	圖1-4 sqlite API接口的使用
	
圖1-5 sqlite官網functions手(shou)冊
SQLite應用
在(zai)一(yi)些智能(neng)家居設(she)(she)備(bei)(bei)(bei)(如智能(neng)音箱、智能(neng)攝像(xiang)頭等)中,SQLite 被(bei)用(yong)來存儲(chu)用(yong)戶(hu)偏好設(she)(she)置、設(she)(she)備(bei)(bei)(bei)狀態及(ji)日志(zhi)信息(xi)。這些設(she)(she)備(bei)(bei)(bei)通常資源有限,SQLite 的小型特性使其非(fei)常適合這類應用(yong)。
下面再看一下MYSQL:
MYSQL歷史
MySQL的(de)(de)歷史可以追溯到20世紀(ji)90年代初(chu)。它由(you)瑞典的(de)(de)Michael Widenius和David Axmark共(gong)同(tong)創立,最初(chu)是為(wei)了(le)滿足Web應用程序的(de)(de)數(shu)據(ju)存儲需求而設計的(de)(de)。隨著互聯網的(de)(de)發(fa)展,MySQL逐漸嶄(zhan)露頭角,成為(wei)最受歡迎(ying)的(de)(de)開源數(shu)據(ju)庫(ku)之一。
2008年,Sun Microsystems收購了MySQL AB,使MySQL得以繼續壯大。之后,Sun Microsystems被Oracle收購,MySQL也成為了Oracle旗下(xia)的(de)(de)(de)重(zhong)要(yao)產(chan)品。不過,由于對MySQL的(de)(de)(de)開放性和競爭問題的(de)(de)(de)擔(dan)憂,Oracle將MySQL交給(gei)了歐洲(zhou)的(de)(de)(de)MySQL社區(qu)維護,確保了其(qi)持續的(de)(de)(de)開源發展(zhan)。
	
	 
圖2-1 mysql數據庫
MYSQL特點
MySQL 是開源的(de),目前隸(li)屬于 Oracle 旗下產品(pin)。
MySQL 支持大(da)型的數(shu)據庫(ku)。可以處理(li)擁有上千(qian)萬條記錄(lu)的大(da)型數(shu)據庫(ku)。
MySQL 使用(yong)標(biao)準的 SQL 數據語言形式。
MySQL 可以運行于多(duo)個(ge)系(xi)統上,并(bing)且支(zhi)持多(duo)種語言。這些編程語言包括(kuo) C、C++、Python、Java、Perl、PHP、Eiffel、Ruby 和(he) Tcl 等。
MySQL 對 PHP 有很(hen)好(hao)的支持(chi),PHP 是(shi)很(hen)適合用于(yu) Web 程序開發。
MySQL 支持(chi)(chi)大型數據(ju)庫,支持(chi)(chi) 5000 萬(wan)條記錄的數據(ju)倉庫,32 位系(xi)統表文件(jian)最大可(ke)支持(chi)(chi) 4GB,64 位系(xi)統支持(chi)(chi)最大的表文件(jian)為8TB。
MySQL 是可以定制的(de),采用了(le) GPL 協議,你可以修改(gai)源碼來開發自己的(de) MySQL 系統。
MYSQL命令
MYSQL數據(ju)庫含有(you)很多的(de)MYSQL命令,比如(ru)‘SHOW DATABASES;’列出(chu)所有(you)可(ke)用(yong)數據(ju)庫,‘USE your_database;’選擇數據(ju)庫,‘SHOW TABLES;’列出(chu)可(ke)用(yong)的(de)所有(you)表等等,如(ru)圖(tu)2-2所示(shi):
	
圖2-2 MYSQL基本命令(ling)命令(ling)
MYSQL數據庫還可以使用(yong)SQL命(ming)令,如圖2-3所示:
	
圖2-2 MYSQL基(ji)本(ben)命令(ling)命令(ling)
MYSQL應用
在(zai)邊緣設備(bei)中(zhong),MySQL 可以(yi)作為本地數(shu)據庫(ku),處理設備(bei)生成的(de)(de)數(shu)據并進(jin)行分析(xi),減少對云端的(de)(de)依賴。在(zai)物聯網應用中(zhong),嵌入(ru)式設備(bei)可能(neng)需要存儲傳感器數(shu)據、設備(bei)狀態或用戶交互數(shu)據,MySQL 能(neng)夠(gou)提供結構(gou)化的(de)(de)數(shu)據存儲和查詢能(neng)力。
在(zai)本篇文(wen)章中(zhong),我們(men)深入探討(tao)了(le)常用的(de)嵌入式數(shu)據(ju)庫(ku),尤其是 SQLite 和(he) MySQL 的(de)特點及(ji)其在(zai)智能設(she)備(bei)數(shu)據(ju)存儲和(he)管理中(zhong)的(de)應(ying)用。這些數(shu)據(ju)庫(ku)在(zai)智能設(she)備(bei)數(shu)據(ju)存儲與(yu)管理中(zhong)的(de)重要性和(he)應(ying)用場(chang)景。SQLite 以其輕量(liang)級和(he)零(ling)配置(zhi)的(de)特性,適(shi)(shi)合(he)(he)于資源受限的(de)設(she)備(bei),成為了(le)小(xiao)型(xing)嵌入式系(xi)統的(de)首選。而 MySQL 通過其強大(da)的(de)功(gong)能與(yu)并發處(chu)理能力,更適(shi)(shi)用于需要處(chu)理較大(da)量(liang)數(shu)據(ju)和(he)復雜查詢的(de)場(chang)合(he)(he)。
隨著物聯網和(he)智能(neng)設(she)備的(de)(de)(de)快速發(fa)展,數據(ju)(ju)管理(li)的(de)(de)(de)需求日益增長,合理(li)選擇合適的(de)(de)(de)嵌(qian)入(ru)式數據(ju)(ju)庫,對(dui)提(ti)高(gao)設(she)備的(de)(de)(de)性能(neng)和(he)用戶體(ti)驗(yan)至關重要(yao)。無論是選擇高(gao)效的(de)(de)(de) SQLite 還是功能(neng)豐富的(de)(de)(de) MySQL,理(li)解它(ta)們各自的(de)(de)(de)特點與應(ying)(ying)用場景,將幫(bang)助開(kai)發(fa)者更好地應(ying)(ying)對(dui)數據(ju)(ju)存儲與管理(li)的(de)(de)(de)挑戰。

