常用數(shù)據(jù)庫(kù),通常面試都會(huì)說(shuō)用SQLite
嵌入式數(shù)據(jù)庫(kù)是輕量級(jí)的炸站,獨(dú)立的庫(kù)星澳,沒(méi)有服務(wù)器組件,無(wú)需管理武契,一個(gè)小的代碼尺寸募判,以及有限的資源需求。目前有幾種嵌入式數(shù)據(jù)庫(kù)咒唆,你可以在移動(dòng)應(yīng)用程序中使用届垫。讓我們來(lái)看看這些最流行的數(shù)據(jù)庫(kù)。
Berkeley DB
Berkeley DB是由美國(guó)Sleepycat Software公司開(kāi)發(fā)的一套開(kāi)放源代碼的嵌入式數(shù)據(jù)庫(kù)管理系統(tǒng)(已被Oracle收購(gòu))全释,它為應(yīng)用程序提供可伸縮的装处、高性能的、有事務(wù)保護(hù)功能的數(shù)據(jù)管理服務(wù)浸船。
Berkeley DB(BDB)是一個(gè)高效的嵌入式數(shù)據(jù)庫(kù)編程庫(kù)妄迁,C語(yǔ)言、C++李命、Java登淘、Perl、Python封字、Tcl以 及其他很多語(yǔ)言都有其對(duì)應(yīng)的API黔州。Berkeley DB可以保存任意類型的鍵/值對(duì)(Key/Value Pair)耍鬓,而且可以為一個(gè)鍵保存多個(gè)數(shù)據(jù)。Berkeley DB支持讓數(shù)千的并發(fā)線程同時(shí)操作數(shù)據(jù)庫(kù)流妻,支持最大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)用所開(kāi)發(fā)的超輕量的燥撞,可靠的,并且安全的JSON數(shù)據(jù)庫(kù)疾党。即使在最不確定的網(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)用程序需要而無(wú)需大幅改動(dòng)應(yīng)用程序
-
易于同步 (輕松同步):
只須幾行代碼就可以同步就緒;使開(kāi)發(fā)者可以更專注于應(yīng)用開(kāi)發(fā)本身完残,而非同步問(wèn)題伏钠。
-
原生 APIs:
使用專門為iOS和Android優(yōu)化的API管理移動(dòng)數(shù)據(jù)庫(kù)
-
REST APIs:
基于你的開(kāi)發(fā)需求, REST APIs 提供了一種替代的訪問(wèn)方法。
LevelDB
LevelDB是Google開(kāi)源出的一個(gè)Key/Value存儲(chǔ)引擎谨设,它采用C++編寫(xiě)的熟掂,支持高并發(fā)訪問(wèn)和寫(xiě)入,特別適合對(duì)于高寫(xiě)入業(yè)務(wù)環(huán)境扎拣。
對(duì)于LevelDB的概覽可以參考
數(shù)據(jù)分析與處理之二(Leveldb 實(shí)現(xiàn)原理)對(duì)LevelDB的一個(gè)描述赴肚,本文的圖解更多的是LevelDB的一個(gè)實(shí)現(xiàn)層的糾纏,版本為L(zhǎng)evelDB 1.7.02二蓝。
LevelDB存儲(chǔ)主要分為SSTable和MemTable誉券,前者為不可變且存儲(chǔ)于持久設(shè)備上,后者位于內(nèi)存上并且可變(在LevelDB中有兩 個(gè)MemTable刊愚,一個(gè)為當(dāng)前寫(xiě)入MemTable踊跟,另一個(gè)為等待持久化的不可變MemTable)。首先來(lái)看SSTable的實(shí)現(xiàn)層分析鸥诽。
SQLite
SQLite是一個(gè)開(kāi)源的嵌入式關(guān)系數(shù)據(jù)庫(kù)商玫,實(shí)現(xiàn)自包容、零配置牡借、支持事務(wù)的SQL數(shù)據(jù)庫(kù)引擎拳昌。 其特點(diǎn)是高度便攜、使用方便钠龙、結(jié)構(gòu)緊湊炬藤、高效御铃、可靠。 與其他數(shù)據(jù)庫(kù)管理系統(tǒng)不同刻像,SQLite 的安裝和運(yùn)行非常簡(jiǎn)單畅买,在大多數(shù)情況下 - 只要確保SQLite的二進(jìn)制文件存在即可開(kāi)始創(chuàng)建、連接和使用數(shù)據(jù)庫(kù)细睡。如果您正在尋找一個(gè)嵌入式數(shù)據(jù)庫(kù)項(xiàng)目或解決方案谷羞,SQLite是絕對(duì)值得考慮。
UnQLite
UnQLite是溜徙,由Symisc Systems公司出品的一個(gè)嵌入式C語(yǔ)言軟件庫(kù)湃缎,它實(shí)現(xiàn)了一個(gè)自包含、無(wú)服務(wù)器蠢壹、零配置嗓违、事務(wù)化的NoSQL數(shù)據(jù)庫(kù)引擎。UnQLite是一個(gè)文檔存儲(chǔ)數(shù)據(jù)庫(kù)图贸,類似于MongoDB蹂季、Redis、CouchDB等疏日。同時(shí)偿洁,也是一個(gè)標(biāo)準(zhǔn)的Key/Value存儲(chǔ),與BerkeleyDB和LevelDB等類似沟优。
UnQLite是一個(gè)嵌入式NoSQL(鍵/值存儲(chǔ)和文檔存儲(chǔ))數(shù)據(jù)庫(kù)引擎涕滋。不同于其他絕大多數(shù)NoSQL數(shù)據(jù)庫(kù),UnQLite沒(méi)有一個(gè)獨(dú)立的服務(wù)器進(jìn)程挠阁。UnQLite直接讀/寫(xiě)普通的磁盤文件宾肺。包含多個(gè)數(shù)據(jù)集的一個(gè)完整的數(shù)據(jù)庫(kù),存儲(chǔ)在單一的磁盤文件中侵俗。數(shù)據(jù)庫(kù)文件格式是跨平臺(tái)的锨用,可以在32位和64位系統(tǒng)或大端和小端架構(gòu)之間,自由拷貝一個(gè)數(shù)據(jù)庫(kù)隘谣。UnQLite的主要特點(diǎn)黔酥,如下:
無(wú)服務(wù)器
數(shù)據(jù)庫(kù)引擎。事務(wù)化
(ACID) 數(shù)據(jù)庫(kù)洪橘。零配置
跪者。單一數(shù)據(jù)庫(kù)文件
,不使用臨時(shí)文件熄求。跨平臺(tái)
的文件格式
渣玲。UnQLite是一個(gè)自包含的C語(yǔ)言程序庫(kù),
無(wú)任何外部依賴
弟晚。標(biāo)準(zhǔn)的
Key/Value
存儲(chǔ)忘衍。基于
Jx9
的文檔存儲(chǔ)
(JSON)數(shù)據(jù)庫(kù)逾苫。支持
游標(biāo)
,滿足線性記錄遍歷枚钓。插件式
運(yùn)行時(shí)可交換存儲(chǔ)引擎铅搓。支持
磁盤持久化
和內(nèi)存模式
的數(shù)據(jù)庫(kù)。內(nèi)建強(qiáng)大的磁盤存儲(chǔ)引擎搀捷,支持
O(1)
查詢星掰。線程安全
,完全可重入嫩舟。簡(jiǎn)單氢烘、清晰,很容易使用的
API
家厌。支持
TB(Terabyte)尺寸
的數(shù)據(jù)庫(kù)播玖。采用
BSD開(kāi)源許可協(xié)議
。合并:UnQLite和Jx9相關(guān)所有C源代碼文件饭于,都合并到
單一的文件中
蜀踏。很好的
在線支持
。
可以通過(guò)
UnQLite特點(diǎn)一頁(yè)掰吕,了解更多的細(xì)節(jié)脓斩。(想想:有幾分SQLite的味兒?)
UnQLite是畴栖,一個(gè)自包含的C庫(kù),無(wú)外部依賴八千。它要求非常小的外部庫(kù)或來(lái)自操作系統(tǒng)的支持吗讶。特別適合應(yīng)用于嵌入式設(shè)備,也適用于應(yīng)用程序內(nèi)部(那些需要運(yùn)行于大量的計(jì)算機(jī)恋捆,而無(wú)需修改各種配置)照皆。
UnQLite是,100%手工編碼沸停,使用ANSI C膜毁,線程安全,完全可重入愤钾,編譯無(wú)需修改瘟滨,而且可運(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ǎn)單的字節(jié)數(shù)組,所以內(nèi)容可以是任何東西疗疟,包括ASCII字符串该默、二進(jìn)制對(duì)象和磁盤文件等。應(yīng)用程 序策彤,可以通過(guò)接口API來(lái)訪問(wèn)KV層栓袖,包括
unqlite_kv_store()
unqlite_kv_append()
unqlite_kv_fetch_callback()
unqlite_kv_append_fmt()
unqlite_kv_delete()
等等。
UnQLite用來(lái)在數(shù)據(jù)庫(kù)中存儲(chǔ)JSON文檔(如店诗,對(duì)象裹刮、數(shù)組、字符串等)的文檔存儲(chǔ)接口庞瘸,是通過(guò)Jx9編程語(yǔ)言支撐/實(shí)現(xiàn)的捧弃。Jx9是一種嵌入式的腳本語(yǔ)言,也叫擴(kuò)展語(yǔ)言擦囊,被設(shè)計(jì)用于通用過(guò)程化編程违霞,具備數(shù)據(jù)表述的特性。Jx9是一個(gè)圖靈完備(Turing-Complete)瞬场,基于JSON的买鸽,動(dòng)態(tài)類型編程語(yǔ)言,作為UnQLite內(nèi)核的一個(gè)庫(kù)而存在贯被。
總之眼五,UnQLite一塊開(kāi)源軟件,在 2-Clause BSD協(xié)議下開(kāi)放源代碼彤灶。