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