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