5個最流行的可用于移動開發(fā)的嵌入式數(shù)據(jù)庫簡介
嵌入式數(shù)據(jù)庫是輕量級的,獨立的庫,沒有服務(wù)器組件,無需管理,一個小的代碼尺寸,以及有限的資源需求。目前有幾種嵌入式數(shù)據(jù)庫,你可以在移動應(yīng)用程序中使用。讓我們來看看這些***的數(shù)據(jù)庫。
數(shù)據(jù)庫 |
數(shù)據(jù)類型存儲 |
License | 支持平臺 |
---|---|---|---|
BerkeleyDB | relational, objects, key-value pairs, documents | AGPL 3.0 | Android, iOS |
Couchbase Lite | documents | Apache 2.0 | Android, iOS |
LevelDB | key-value pairs | New BSD | Android, iOS |
SQLite | relational | Public Domain | Android, iOS, Windows Phone, Blackberry |
UnQLite | key-value pairs, documents | BSD 2-Clause | Android, iOS, Windows Phone |
Berkeley DB
Berkeley DB是由美國Sleepycat Software公司開發(fā)的一套開放源代碼的嵌入式數(shù)據(jù)庫管理系統(tǒng)(已被Oracle收購),它為應(yīng)用程序提供可伸縮的、高性能的、有事務(wù)保護功能的數(shù)據(jù)管理服務(wù)。
Berkeley DB(BDB)是一個高效的嵌入式數(shù)據(jù)庫編程庫,C語言、C++、Java、Perl、Python、Tcl以及 其他很多語言都有其對應(yīng)的API。Berkeley DB可以保存任意類型的鍵/值對(Key/Value Pair),而且可以為一個鍵保存多個數(shù)據(jù)。Berkeley DB支持讓數(shù)千的并發(fā)線程同時操作數(shù)據(jù)庫,支持***256TB的數(shù)據(jù),廣泛用于各種操作系統(tǒng),其中包括大多數(shù)類Unix操作系統(tǒng)、Windows操作系統(tǒng) 以及實時操作系統(tǒng)。
Couchbase Lite
Couchbase Lite是一個為滿足在線和離線的移動應(yīng)用所開發(fā)的超輕量的,可靠的,并且安全的JSON數(shù)據(jù)庫。即使在最不確定的網(wǎng)絡(luò)條件下,亦可以給您的移動應(yīng)用提供富有成效的和可靠的信譽。除此之外,’同步門戶’功能亦可以提供協(xié)作, 社交互動或者是用戶的更新。
Couchbase移動平臺的亮點
JSON Anywhere
使用專為面向?qū)ο蟮囊苿討?yīng)用設(shè)計的靈活的數(shù)據(jù)模型,即時適應(yīng)你的應(yīng)用程序需要而無需大幅改動應(yīng)用程序。
易于同步 (輕松同步)
只須幾行代碼就可以同步就緒;使開發(fā)者可以更專注于應(yīng)用開發(fā)本身,而非同步問題。
原生 APIs
使用專門為iOS和Android優(yōu)化的API管理移動數(shù)據(jù)庫
REST APIs
基于你的開發(fā)需求, REST APIs 提供了一種替代的訪問方法。
LevelDB
LevelDB是Google開源出的一個Key/Value存儲引擎,它采用C++編寫的,支持高并發(fā)訪問和寫入,特別適合對于高寫入業(yè)務(wù)環(huán)境。對于LevelDB的概覽可以參考數(shù)據(jù)分析與處理之二(Leveldb 實現(xiàn)原理)對LevelDB的一個描述,本文的圖解更多的是LevelDB的一個實現(xiàn)層的糾纏,版本為LevelDB 1.7.02。
LevelDB存儲主要分為SSTable和MemTable,前者為不可變且存儲于持久設(shè)備上,后者位于內(nèi)存上并且可變(在LevelDB中有兩 個MemTable,一個為當(dāng)前寫入MemTable,另一個為等待持久化的不可變MemTable)。首先來看SSTable的實現(xiàn)層分析。
SQLite
SQLite 是一個開源的嵌入式關(guān)系數(shù)據(jù)庫,實現(xiàn)自包容、零配置、支持事務(wù)的SQL數(shù)據(jù)庫引擎。 其特點是高度便攜、使用方便、結(jié)構(gòu)緊湊、高效、可靠。 與其他數(shù)據(jù)庫管理系統(tǒng)不同,SQLite 的安裝和運行非常簡單,在大多數(shù)情況下 – 只要確保SQLite的二進制文件存在即可開始創(chuàng)建、連接和使用數(shù)據(jù)庫。如果您正在尋找一個嵌入式數(shù)據(jù)庫項目或解決方案,SQLite是絕對值得考慮。
UnQLite
UnQLite是,由 Symisc Systems公司出品的一個嵌入式C語言軟件庫,它實現(xiàn)了一個自包含、無服務(wù)器、零配置、事務(wù)化的NoSQL數(shù)據(jù)庫引擎。UnQLite是一個文檔存儲數(shù)據(jù)庫,類似于MongoDB、Redis、CouchDB等。同時,也是一個標(biāo)準(zhǔn)的Key/Value存儲,與BerkeleyDB和LevelDB等類似。
UnQLite是一個嵌入式NoSQL(鍵/值存儲和文檔存儲)數(shù)據(jù)庫引擎。不同于其他絕大多數(shù)NoSQL數(shù)據(jù)庫,UnQLite沒有一個獨立的服務(wù)器進程。UnQLite直接讀/寫普通的磁盤文件。包含多個數(shù)據(jù)集的一個完整的數(shù)據(jù)庫,存儲在單一的磁盤文件中。數(shù)據(jù)庫文件格式是跨平臺的,可以在32位和64位系統(tǒng)或大端和小端架構(gòu)之間,自由拷貝一個數(shù)據(jù)庫。UnQLite的主要特點,如下:
- `無服務(wù)器`數(shù)據(jù)庫引擎。
- `事務(wù)化`(ACID)數(shù)據(jù)庫。
- `零配置`。
- `單一數(shù)據(jù)庫文件`,不使用臨時文件。
- `跨平臺`的`文件格式`。
- UnQLite是一個自包含的C語言程序庫,`無任何外部依賴`。
- 標(biāo)準(zhǔn)的`Key/Value`存儲。
- 基于`Jx9`的`文檔存儲`(JSON)數(shù)據(jù)庫。
- 支持`游標(biāo)`,滿足線性記錄遍歷。
- `插件式`運行時可交換存儲引擎。
- 支持`磁盤持久化`和`內(nèi)存模式`的數(shù)據(jù)庫。
- 內(nèi)建強大的磁盤存儲引擎,支持`O(1)`查詢。
- `線程安全`,完全可重入。
- 簡單、清晰,很容易使用的`API`。
- 支持`TB(Terabyte)尺寸`的數(shù)據(jù)庫。
- 采用`BSD開源許可協(xié)議`。
- 合并:UnQLite和Jx9相關(guān)所有C源代碼文件,都合并到`單一的文件中`。
- 很好的`在線支持`。
可以通過UnQLite特點一頁,了解更多的細(xì)節(jié)。(想想:有幾分SQLite的味兒?)
UnQLite是,一個自包含的C庫,無外部依賴。它要求非常小的外部庫或來自操作系統(tǒng)的支持。特別適合應(yīng)用于嵌入式設(shè)備,也適用于應(yīng)用程序內(nèi)部(那些需要運行于大量的計算機,而無需修改各種配置)。
UnQLite是,100%手工編碼,使用ANSI C,線程安全,完全可重入,編譯無需修改,而且可運行于絕大多數(shù)的平臺,包括受限的嵌入式設(shè)備,僅需要一個C編譯器。UnQLite已經(jīng)在非常廣泛的平臺 進行了測試,包括Windows和UNIX系統(tǒng),特別是Linux、FreeBSD、Oracle Solaris及Mac OS X。
UnQLite是,一個標(biāo)準(zhǔn)的key/value存儲,與BerkeleyDB和LevelDB等相似。但是,擁有更加豐富的特性集,包括支持事務(wù) (ACID),并發(fā)讀等。在KV存儲下,鍵和值都被視為簡單的字節(jié)數(shù)組,所以內(nèi)容可以是任何東西,包括ASCII字符串、二進制對象和磁盤文件等。應(yīng)用程 序,可以通過接口API來訪問KV層,包括
- unqlite_kv_store()
- unqlite_kv_append()
- unqlite_kv_fetch_callback()
- unqlite_kv_append_fmt()
- unqlite_kv_delete()
等等。
UnQLite用來在數(shù)據(jù)庫中存儲JSON文檔(如,對象、數(shù)組、字符串等)的文檔存儲接口,是通過Jx9編程語言支撐/實現(xiàn)的。Jx9是一種嵌入式的腳本語言,也叫擴展語言,被設(shè)計用于通用過程化編程,具備數(shù)據(jù)表述的特性。Jx9是一個圖靈完備(Turing-Complete),基于JSON的,動態(tài)類型編程語言,作為UnQLite內(nèi)核的一個庫而存在。
總之,UnQLite一塊開源軟件,在 2-Clause BSD協(xié)議下開放源代碼。