一、一般的單機(jī)版軟件(不聯(lián)網(wǎng))用什么存儲(chǔ)數(shù)據(jù)
1、SQLite
SQLite是一種輕量級(jí)的關(guān)系型數(shù)據(jù)庫(kù)引擎,可以直接將數(shù)據(jù)存儲(chǔ)在一個(gè)文件中,無需單獨(dú)安裝數(shù)據(jù)庫(kù)服務(wù)。SQLite支持標(biāo)準(zhǔn)的SQL語言,并提供了對(duì)事務(wù)、索引、觸發(fā)器等數(shù)據(jù)庫(kù)特性的支持,適用于小規(guī)模的數(shù)據(jù)存儲(chǔ)和管理。
2、鍵值對(duì)存儲(chǔ)
鍵值對(duì)存儲(chǔ)是一種輕量級(jí)的非關(guān)系型數(shù)據(jù)庫(kù),使用簡(jiǎn)單,并且支持高速讀寫,常見的鍵值存儲(chǔ)有Redis、LevelDB等。但鍵值對(duì)存儲(chǔ)不支持SQL,其功能比較簡(jiǎn)單,適用于小型應(yīng)用,對(duì)于關(guān)聯(lián)查詢等復(fù)雜操作支持不太理想。
3、本地文件系統(tǒng)
將數(shù)據(jù)以文本或二進(jìn)制格式的文件保存在計(jì)算機(jī)的硬盤上,可以使用常見的TXT、XML、JSON、CSV等格式。這種方式簡(jiǎn)單易用,適用于小規(guī)模數(shù)據(jù)存儲(chǔ),但數(shù)據(jù)訪問效率相對(duì)較低,對(duì)大規(guī)模數(shù)據(jù)存儲(chǔ)和處理不太適合。
4、內(nèi)存存儲(chǔ)
將數(shù)據(jù)存儲(chǔ)在內(nèi)存中,可以提供非??焖俚淖x寫速度和響應(yīng)時(shí)間,適用于小規(guī)模的數(shù)據(jù),如緩存和臨時(shí)數(shù)據(jù)存儲(chǔ)等。但由于內(nèi)存大小限制,不能存儲(chǔ)大規(guī)模數(shù)據(jù)且不支持永久存儲(chǔ)。
二、SQLite介紹
1、簡(jiǎn)介
SQLite,是一款輕型的數(shù)據(jù)庫(kù),是遵守ACID的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng),它包含在一個(gè)相對(duì)小的C庫(kù)中。它是D.RichardHipp建立的公有領(lǐng)域項(xiàng)目。它的設(shè)計(jì)目標(biāo)是嵌入式的,而且已經(jīng)在很多嵌入式產(chǎn)品中使用了它,它占用資源非常的低,在嵌入式設(shè)備中,可能只需要幾百K的內(nèi)存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統(tǒng),同時(shí)能夠跟很多程序語言相結(jié)合,比如 Tcl、C#、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開源的世界知名數(shù)據(jù)庫(kù)管理系統(tǒng)來講,它的處理速度比他們都快。SQLite名列前茅個(gè)Alpha版本誕生于2000年5月。 至2021年已經(jīng)接近有21個(gè)年頭,SQLite也迎來了一個(gè)版本 SQLite 3已經(jīng)發(fā)布。
2、工作原理
不像常見的客戶—服務(wù)器范例,SQLite引擎不是個(gè)程序與之通信的獨(dú)立進(jìn)程,而是連接到程序中成為它的一個(gè)主要部分。所以主要的通信協(xié)議是在編程語言內(nèi)的直接API調(diào)用。這在消耗總量、延遲時(shí)間和整體簡(jiǎn)單性上有積極的作用。整個(gè)數(shù)據(jù)庫(kù)(定義、表、索引和數(shù)據(jù)本身)都在宿主主機(jī)上存儲(chǔ)在一個(gè)單一的文件中。它的簡(jiǎn)單的設(shè)計(jì)是通過在開始一個(gè)事務(wù)的時(shí)候鎖定整個(gè)數(shù)據(jù)文件而完成的。
3、功能特性
ACID事務(wù)零配置,無需安裝和管理配置儲(chǔ)存在單一磁盤文件中的一個(gè)完整的數(shù)據(jù)庫(kù)數(shù)據(jù)庫(kù)文件可以在不同字節(jié)順序的機(jī)器間自由的共享支持?jǐn)?shù)據(jù)庫(kù)大小至2TB足夠小,大致13萬行C代碼,4.43M比一些流行的數(shù)據(jù)庫(kù)在大部分普通數(shù)據(jù)庫(kù)操作要快簡(jiǎn)單,輕松的API包含TCL綁定,同時(shí)通過Wrapper支持其他語言的綁定良好注釋的源代碼,并且有著90%以上的測(cè)試覆蓋率獨(dú)立,沒有額外依賴源碼完全的開源,你可以用于任何用途,包括出售它支持多種開發(fā)語言,C,C++,PHP,Perl,Java,C#,Python,Ruby等同時(shí)它還支持事務(wù)處理功能等等。也有人說它象Microsoft的Access,有時(shí)候真的覺得有點(diǎn)象,但是事實(shí)上它們區(qū)別很大。比如SQLite 支持跨平臺(tái),操作簡(jiǎn)單,能夠使用很多語言直接創(chuàng)建數(shù)據(jù)庫(kù),而不象Access一樣需要Office的支持。如果你是個(gè)很小型的應(yīng)用,或者你想做嵌入式開發(fā),沒有合適的數(shù)據(jù)庫(kù)系統(tǒng),那么你可以考慮使用SQLite。到2013年10月17日最新版本是 3.8.1 。能在上面獲得源代碼和文檔。同時(shí)因?yàn)閿?shù)據(jù)庫(kù)結(jié)構(gòu)簡(jiǎn)單,系統(tǒng)源代碼也不是很多,也適合想研究數(shù)據(jù)庫(kù)系統(tǒng)開發(fā)的專業(yè)人士。
4、常用函數(shù)
SQLite 有許多內(nèi)置函數(shù)用于處理字符串或數(shù)字?jǐn)?shù)據(jù)。下面列出了一些有用的 SQLite 內(nèi)置函數(shù),且所有函數(shù)都是大小寫不敏感,這意味著您可以使用這些函數(shù)的小寫形式或大寫形式或混合形式。欲了解更多詳情,請(qǐng)查看 SQLite 的官方文檔:
SQLite COUNT 函數(shù):SQLite COUNT?聚集函數(shù)是用來計(jì)算一個(gè)數(shù)據(jù)庫(kù)表中的行數(shù)。SQLite MAX 函數(shù):SQLite MAX?聚合函數(shù)允許我們選擇某列的最大值。SQLite MIN 函數(shù):SQLite MIN?聚合函數(shù)允許我們選擇某列的最小值。SQLite?AVG?函數(shù):SQLite AVG 聚合函數(shù)計(jì)算某列的平均值。SQLite SUM 函數(shù):SQLite SUM 聚合函數(shù)允許為一個(gè)數(shù)值列計(jì)算總和。SQLite RANDOM 函數(shù):SQLite RANDOM 函數(shù)返回一個(gè)介于 -9223372036854775808 和 +9223372036854775807 之間的偽隨機(jī)整數(shù)。SQLite?ABS?函數(shù):SQLite ABS 函數(shù)返回?cái)?shù)值參數(shù)的絕對(duì)值。SQLite UPPER 函數(shù):SQLite UPPER 函數(shù)把字符串轉(zhuǎn)換為大寫字母。SQLite LOWER 函數(shù):SQLite LOWER 函數(shù)把字符串轉(zhuǎn)換為小寫字母。SQLite LENGTH 函數(shù):SQLite LENGTH 函數(shù)返回字符串的長(zhǎng)度。SQLite sqlite_version 函數(shù):SQLite sqlite_version 函數(shù)返回 SQLite 庫(kù)的版本。5、語言綁定
可以從C/C++程序中使用這個(gè)庫(kù),還可以獲得對(duì)Tcl和一些其他腳本語言的綁定。在CPAN的DBD::SQLite上有一個(gè)Perl的DBI/DBD模塊,它不是到SQLite的接口,而是包括整個(gè)SQLite數(shù)據(jù)庫(kù)引擎在其中并不需要任何額外的軟件。還有一個(gè)Python模塊叫做PySQLite。PHP從PHP5.0開始包含了SQLite,但是自5.1版之后開始成為一個(gè)延伸函式庫(kù)。SQLite能與PHP4一起工作但不包含在其中。Rails2.0.3將缺省的數(shù)據(jù)庫(kù)配置改為了SQLite 3。
延伸閱讀1:WAL恢復(fù)法簡(jiǎn)介
WAL是關(guān)系型數(shù)據(jù)庫(kù)中用于實(shí)現(xiàn)事務(wù)性和持久性的一系列技術(shù)。數(shù)據(jù)文件(存儲(chǔ)著表和索引)的修改必須在這些動(dòng)作被WAL記錄之后才被寫入,即在描述這些改變的日志記錄被刷到持久存儲(chǔ)以后,數(shù)據(jù)庫(kù)在執(zhí)行命令之前先將它記下來。比如,人們平時(shí)會(huì)寫備忘錄,記錄自己要做的事,WAL就是那個(gè)備忘錄。SQLite3可以通過命令“PRAGMA journal_mode=WAL”打開WAL模式。