常用內(nèi)存數(shù)據(jù)庫(kù)介紹.doc_第1頁(yè)
常用內(nèi)存數(shù)據(jù)庫(kù)介紹.doc_第2頁(yè)
常用內(nèi)存數(shù)據(jù)庫(kù)介紹.doc_第3頁(yè)
常用內(nèi)存數(shù)據(jù)庫(kù)介紹.doc_第4頁(yè)
常用內(nèi)存數(shù)據(jù)庫(kù)介紹.doc_第5頁(yè)
已閱讀5頁(yè),還剩12頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

常用內(nèi)存數(shù)據(jù)庫(kù)介紹1 1. 內(nèi)存數(shù)據(jù)庫(kù)簡(jiǎn)介2 1.1 概念一、什么是內(nèi)存數(shù)據(jù)庫(kù) 傳統(tǒng)的數(shù)據(jù)庫(kù)管理系統(tǒng)把所有數(shù)據(jù)都放在磁盤上進(jìn)行管理,所以稱做磁盤數(shù)據(jù)庫(kù)(DRDB:Disk-Resident Database)。磁盤數(shù)據(jù)庫(kù)需要頻繁地訪問(wèn)磁盤來(lái)進(jìn)行數(shù)據(jù)的操作,由于對(duì)磁盤讀寫數(shù)據(jù)的操作一方面要進(jìn)行磁頭的機(jī)械移動(dòng),另一方面受到系統(tǒng)調(diào)用(通常通過(guò)CPU中斷完成,受到CPU時(shí)鐘周期的制約)時(shí)間的影響,當(dāng)數(shù)據(jù)量很大,操作頻繁且復(fù)雜時(shí),就會(huì)暴露出很多問(wèn)題。 近年來(lái),內(nèi)存容量不斷提高,價(jià)格不斷下跌,操作系統(tǒng)已經(jīng)可以支持更大的地址空間(計(jì)算機(jī)進(jìn)入了64位時(shí)代),同時(shí)對(duì)數(shù)據(jù)庫(kù)系統(tǒng)實(shí)時(shí)響應(yīng)能力要求日益提高,充分利用內(nèi)存技術(shù)提升數(shù)據(jù)庫(kù)性能成為一個(gè)熱點(diǎn)。 在數(shù)據(jù)庫(kù)技術(shù)中,目前主要有兩種方法來(lái)使用大量的內(nèi)存。一種是在傳統(tǒng)的數(shù)據(jù)庫(kù)中,增大緩沖池,將一個(gè)事務(wù)所涉及的數(shù)據(jù)都放在緩沖池中,組織成相應(yīng)的數(shù)據(jù)結(jié)構(gòu)來(lái)進(jìn)行查詢和更新處理,也就是常說(shuō)的共享內(nèi)存技術(shù),這種方法優(yōu)化的主要目標(biāo)是最小化磁盤訪問(wèn)。另一種就是內(nèi)存數(shù)據(jù)庫(kù)(MMDB:Main Memory Database,也叫主存數(shù)據(jù)庫(kù))技術(shù),就是干脆重新設(shè)計(jì)一種數(shù)據(jù)庫(kù)管理系統(tǒng),對(duì)查詢處理、并發(fā)控制與恢復(fù)的算法和數(shù)據(jù)結(jié)構(gòu)進(jìn)行重新設(shè)計(jì),以更有效地使用CPU周期和內(nèi)存,這種技術(shù)近乎把整個(gè)數(shù)據(jù)庫(kù)放進(jìn)內(nèi)存中,因而會(huì)產(chǎn)生一些根本性的變化。兩種技術(shù)的區(qū)別如下表:內(nèi)存數(shù)據(jù)庫(kù)系統(tǒng)帶來(lái)的優(yōu)越性能不僅僅在于對(duì)內(nèi)存讀寫比對(duì)磁盤讀寫快上,更重要的是,從根本上拋棄了磁盤數(shù)據(jù)管理的許多傳統(tǒng)方式,基于全部數(shù)據(jù)都在內(nèi)存中管理進(jìn)行了新的體系結(jié)構(gòu)的設(shè)計(jì),并且在數(shù)據(jù)緩存、快速算法、并行操作方面也進(jìn)行了相應(yīng)的改進(jìn),從而使數(shù)據(jù)處理速度一般比傳統(tǒng)數(shù)據(jù)庫(kù)的數(shù)據(jù)處理速度快很多,一般都在10倍以上,理想情況甚至可以達(dá)到1000倍。 而使用共享內(nèi)存技術(shù)的實(shí)時(shí)系統(tǒng)和使用內(nèi)存數(shù)據(jù)庫(kù)相比有很多不足,由于優(yōu)化的目標(biāo)仍然集中在最小化磁盤訪問(wèn)上,很難滿足完整的數(shù)據(jù)庫(kù)管理的要求,設(shè)計(jì)的非標(biāo)準(zhǔn)化和軟件的專用性造成可伸縮性、可用性和系統(tǒng)的效率都非常低,對(duì)于快速部署和簡(jiǎn)化維護(hù)都是不利的。3 2. 內(nèi)存數(shù)據(jù)庫(kù)歷史和發(fā)展一、雛形期從上個(gè)世紀(jì)60年代末到80年代初。在這個(gè)時(shí)期中,出現(xiàn)了主存數(shù)據(jù)庫(kù)的雛形。1969年IBM公司研制了世界上最早的數(shù)據(jù)庫(kù)管理系統(tǒng)-基于層次模型的數(shù)據(jù)庫(kù)管理系統(tǒng)IMS,并作為商品化軟件投入市場(chǎng)。在設(shè)計(jì)IMS時(shí),IBM考慮到基于內(nèi)存的數(shù)據(jù)管理方法,相應(yīng)推出了IMS/VS Fast Path。Fast Path是一個(gè)支持內(nèi)存駐留數(shù)據(jù)的商業(yè)化數(shù)據(jù)庫(kù),但它同時(shí)也可以很好地支持磁盤駐留數(shù)據(jù)。在這個(gè)產(chǎn)品中體現(xiàn)了主存數(shù)據(jù)庫(kù)的主要設(shè)計(jì)思想,也就是將需要頻繁訪問(wèn),要求高響應(yīng)速度的數(shù)據(jù)直接存放在物理內(nèi)存中訪問(wèn)和管理。在這個(gè)階段中,包括網(wǎng)狀數(shù)據(jù)庫(kù)、關(guān)系數(shù)據(jù)庫(kù)等其他各種數(shù)據(jù)庫(kù)技術(shù)也都逐漸成型。 二、技術(shù)理論成熟期1984年,D J DeWitt等人發(fā)表了主存數(shù)據(jù)庫(kù)系統(tǒng)的實(shí)現(xiàn)技術(shù)一文。第一次提出了Main Memory Database(主存數(shù)據(jù)庫(kù))的概念。預(yù)言當(dāng)時(shí)異常昂貴的計(jì)算機(jī)主存價(jià)格一定會(huì)下降,用戶有可能將大容量的數(shù)據(jù)庫(kù)全部保存在主存中,提出了AVL樹(shù)、哈希算法、主存數(shù)據(jù)庫(kù)恢復(fù)機(jī)制等主存數(shù)據(jù)庫(kù)技術(shù)的關(guān)鍵理論,為主存數(shù)據(jù)庫(kù)的發(fā)展指出了明確的方向 。1984年,D J DeWitt等人提出使用非易逝內(nèi)存或預(yù)提交和成組提交技術(shù)作為主存數(shù)據(jù)庫(kù)的提交處理方案,使用指針實(shí)現(xiàn)主存數(shù)據(jù)庫(kù)的存取訪問(wèn)。1985年,IBM推出了IBM 370上運(yùn)行的OBE主存數(shù)據(jù)庫(kù) 1986年,RB Hagman提出了使用檢查點(diǎn)技術(shù)實(shí)現(xiàn)主存數(shù)據(jù)庫(kù)的恢復(fù)機(jī)制。威斯康星大學(xué)提出了按區(qū)雙向鎖定模式解決主存數(shù)據(jù)庫(kù)中的并發(fā)控制問(wèn)題。并設(shè)計(jì)出MM-DBMS主存數(shù)據(jù)庫(kù)。貝爾實(shí)驗(yàn)室推出了DALI主存數(shù)據(jù)庫(kù)模型。 1987年,ACM SIGMOD會(huì)議中提出了以堆文件(HEAP FILE)作為主存數(shù)據(jù)庫(kù)的數(shù)據(jù)存儲(chǔ)結(jié)構(gòu)。Southern Methodist大學(xué)設(shè)計(jì)出MARS主存數(shù)據(jù)庫(kù)模型。1988年普林斯頓大學(xué)設(shè)計(jì)出TPK主存數(shù)據(jù)庫(kù)。 1990年普林斯頓大學(xué)又設(shè)計(jì)出System M主存數(shù)據(jù)庫(kù)。三、產(chǎn)品發(fā)展期和市場(chǎng)成長(zhǎng)期隨著互聯(lián)網(wǎng)的發(fā)展,越來(lái)越多的網(wǎng)絡(luò)應(yīng)用系統(tǒng)需要能夠支持大用戶量并發(fā)訪問(wèn)、高響應(yīng)速度的的數(shù)據(jù)庫(kù)系統(tǒng),主存數(shù)據(jù)庫(kù)市場(chǎng)成熟 半導(dǎo)體技術(shù)快速發(fā)展,半導(dǎo)體內(nèi)存大規(guī)模生產(chǎn),動(dòng)態(tài)隨機(jī)存取存儲(chǔ)器(DRAM)的容量越來(lái)越大,而價(jià)格越來(lái)越低,這無(wú)疑為計(jì)算機(jī)內(nèi)存的不斷擴(kuò)大提供了硬件基礎(chǔ),使得主存數(shù)據(jù)庫(kù)的技術(shù)可行性逐步成熟 1994年美國(guó)OSE公司推出了第一個(gè)商業(yè)化的,開(kāi)始實(shí)際應(yīng)用的主存數(shù)據(jù)庫(kù)產(chǎn)品Polyhedra 1998年德國(guó)SoftwareAG推出了Tamino Database。 1999年日本UBIT會(huì)社開(kāi)發(fā)出XDB主存數(shù)據(jù)庫(kù)產(chǎn)品。韓國(guó)Altibase推出Altibase 2000年奧地利的QuiLogic公司推出了SQL-IMDB 2001年美國(guó)McObject推出eXtremeDB。加拿大Empress公司推出EmpressDB四、幾種主存技術(shù)應(yīng)用的比較第一代:用戶定制的主存數(shù)據(jù)庫(kù)。通過(guò)應(yīng)用程序來(lái)管理內(nèi)存和數(shù)據(jù);不支持SQL語(yǔ)句, 不提供本地存儲(chǔ), 沒(méi)有數(shù)據(jù)庫(kù)恢復(fù)技術(shù);性能好但很難維護(hù)和在別的應(yīng)用中不能使用;應(yīng)用在實(shí)時(shí)領(lǐng)域比如工廠自動(dòng)化生產(chǎn)。第二代:簡(jiǎn)單功能的內(nèi)存數(shù)據(jù)庫(kù)。能夠快速處理簡(jiǎn)單的查詢;支持部分的 SQL語(yǔ)句和簡(jiǎn)單的恢復(fù)技術(shù);主要目的是能夠快速處理大量事務(wù);針對(duì)簡(jiǎn)單事務(wù)處理領(lǐng)域,尤其是交換機(jī), 移動(dòng)通信等。第三代:通用的主存數(shù)據(jù)庫(kù)。針對(duì)傳統(tǒng)的商業(yè)關(guān)系型數(shù)據(jù)庫(kù)領(lǐng)域,能夠提供更高的性能、通用性以及穩(wěn)定性;提供不同的接口來(lái)處理復(fù)雜的SQL語(yǔ)句和滿足不同的應(yīng)用領(lǐng)域;可以應(yīng)用在計(jì)費(fèi)、電子商務(wù)、在線安全領(lǐng)域,幾乎包括磁盤數(shù)據(jù)庫(kù)的所有應(yīng)用領(lǐng)域。五、目前幾種常見(jiàn)的通用內(nèi)存數(shù)據(jù)庫(kù)eXtremeDB:eXtremeDB實(shí)時(shí)數(shù)據(jù)庫(kù)是McObject公司的一款特別為實(shí)時(shí)與嵌入式系統(tǒng)數(shù)據(jù)管理而設(shè)計(jì)的數(shù)據(jù)庫(kù),只有50K到130K的開(kāi)銷,速度達(dá)到微秒級(jí)。eXtremeDB完全駐留在主內(nèi)存中,不使用文件系統(tǒng)(包括內(nèi)存盤)。eXtremeDB采用了新的磁盤融合技術(shù),將內(nèi)存拓展到磁盤,將磁盤當(dāng)做虛擬內(nèi)存來(lái)用,實(shí)時(shí)性能保持微秒級(jí)的同時(shí),數(shù)據(jù)管理量在32BIT下能達(dá)到20G。Oracle TimesTen:Oracle TimesTen是Oracle從TimesTen公司收購(gòu)的一個(gè)內(nèi)存優(yōu)化的關(guān)系數(shù)據(jù)庫(kù),它為應(yīng)用程序提供了實(shí)時(shí)企業(yè)和行業(yè)(例如電信、資本市場(chǎng)和國(guó)防)所需的即時(shí)響應(yīng)性和非常高的吞吐量。Oracle TimesTen可作為高速緩存或嵌入式數(shù)據(jù)庫(kù)被部署在應(yīng)用程序?qū)又校脴?biāo)準(zhǔn)的 SQL 接口對(duì)完全位于物理內(nèi)存中的數(shù)據(jù)存儲(chǔ)區(qū)進(jìn)行操作。SolidDB:Solid Information Technology 成立于 1992 年,全球總部位于加州Cupertino,Solid數(shù)據(jù)管理平臺(tái)將基于內(nèi)存和磁盤的全事務(wù)處理數(shù)據(jù)庫(kù)引擎、載體級(jí)高可用性及強(qiáng)大的數(shù)據(jù)復(fù)制功能緊密地融為一體。ALTIBASE公司從1999年就一直致力于內(nèi)存數(shù)據(jù)庫(kù)軟件和其應(yīng)用的開(kāi)發(fā),提供高性能和高可用性的軟件解決方案。特別適合通信、網(wǎng)上銀行、證券交易、實(shí)時(shí)應(yīng)用和嵌入式系統(tǒng)領(lǐng)域。目前占據(jù)80%以上內(nèi)存數(shù)據(jù)庫(kù)市場(chǎng),可以說(shuō)是當(dāng)今數(shù)據(jù)庫(kù)軟件技術(shù)的領(lǐng)導(dǎo)者。目前Altibase在國(guó)內(nèi)成功案例也比較多,尤其是在電信行業(yè),已經(jīng)得到了廣泛認(rèn)可.4 4. 常用內(nèi)存數(shù)據(jù)庫(kù) 5 4.1 SQLiteSQLite是一個(gè)小型的C程序庫(kù),實(shí)現(xiàn)了獨(dú)立的,可嵌入的,零配置的SQL數(shù)據(jù)庫(kù)引擎。特性包括: 事務(wù)操作是原子,一致,孤立,并且持久的(ACID),即使在系統(tǒng)崩潰和電源故障之后。 零配置不需要安裝和管理。 實(shí)現(xiàn)了絕大多數(shù)SQL92標(biāo)準(zhǔn)。 整個(gè)數(shù)據(jù)庫(kù)存儲(chǔ)在一個(gè)單一的文件中。 數(shù)據(jù)庫(kù)文件可以在不同字節(jié)序的機(jī)器之間自由地共享。 支持最大可達(dá)2T的數(shù)據(jù)庫(kù)。 (241 字節(jié)) 字符串和BLOB類型的大小最大可達(dá) 2G 字節(jié)(231字節(jié))。 小的代碼: 完整配置的少于250KB,忽略一些可選特性的少于150KB。 在大多數(shù)常見(jiàn)操作上比流行的客戶/服務(wù)器數(shù)據(jù)庫(kù)引擎更快。 簡(jiǎn)單,易于使用的API。 內(nèi)建TCL綁定。 另外提供可用于許多其他語(yǔ)言的綁定。 具有良好注釋的源代碼,95%經(jīng)過(guò)測(cè)試。 獨(dú)立:沒(méi)有外部依賴。 源代碼位于公共域。 可用于任何用途。 SQLite發(fā)行版包含一個(gè)獨(dú)立的命令行訪問(wèn)程序(sqlite),可用于管理SQLite數(shù)據(jù)庫(kù),并適合作為一個(gè)如何使用SQLite庫(kù)的例子。 License: SQLite使用Public domain授權(quán)(注),對(duì)于個(gè)人使用和商業(yè)使用都是免費(fèi)的。技術(shù)上的優(yōu)點(diǎn)和特性SQLite是一個(gè)輕量級(jí)、跨平臺(tái)的關(guān)系型數(shù)據(jù)庫(kù)。輕量級(jí)先說(shuō)它的第一個(gè)特色:輕量級(jí)。想必SQLite的作者很看重這個(gè)特性,連它的Logo都是用的“羽毛”,來(lái)顯擺它的輕飄飄。SQLite和C/S模式的數(shù)據(jù)庫(kù)軟件不同,它是進(jìn)程內(nèi)的數(shù)據(jù)庫(kù)引擎,因此不存在數(shù)據(jù)庫(kù)的客戶端和服務(wù)器。使用SQLite一般只需要帶上它的一個(gè)動(dòng)態(tài)庫(kù),就可以享受它的全部功能。而且那個(gè)動(dòng)態(tài)庫(kù)的尺寸也挺小,以版本3.6.11為例,Windows下487KB、Linux下347KB。 綠色軟件SQLite的另外一個(gè)特點(diǎn)是綠色:它的核心引擎本身不依賴第三方的軟件,使用它也不需要“安裝”。所以在部署的時(shí)候能夠省去不少麻煩。單一文件所謂的“單一文件”,就是數(shù)據(jù)庫(kù)中所有的信息(比如表、視圖、觸發(fā)器、等)都包含在一個(gè)文件內(nèi)。這個(gè)文件可以copy到其它目錄或其它機(jī)器上,也照用不誤。技術(shù)上的缺點(diǎn)和不足并發(fā)訪問(wèn)的鎖機(jī)制SQLite在并發(fā)(包括多進(jìn)程和多線程)讀寫方面的性能一直不太理想。數(shù)據(jù)庫(kù)可能會(huì)被寫操作獨(dú)占,從而導(dǎo)致其它讀寫操作阻塞或出錯(cuò)。SQL標(biāo)準(zhǔn)支持不全在它的官方網(wǎng)站上,具體列舉了不支持哪些SQL92標(biāo)準(zhǔn)。我個(gè)人感覺(jué)比較不爽的是不支持外鍵約束。網(wǎng)絡(luò)文件系統(tǒng)(以下簡(jiǎn)稱NFS)有時(shí)候需要訪問(wèn)其它機(jī)器上的SQLite數(shù)據(jù)庫(kù)文件,就會(huì)把數(shù)據(jù)庫(kù)文件放置到網(wǎng)絡(luò)共享目錄上。這時(shí)候你就要小心了。當(dāng)SQLite文件放置于NFS時(shí),在并發(fā)讀寫的情況下可能會(huì)出問(wèn)題(比如數(shù)據(jù)損壞)。原因據(jù)說(shuō)是由于某些NFS的文件鎖實(shí)現(xiàn)上有Bug。編程語(yǔ)言接口SQLite支持很多種語(yǔ)言的編程接口。這對(duì)于我這種喜歡混用多種編程語(yǔ)言的人來(lái)說(shuō),是很爽的。下面我大概介紹一下。C/C+由于SQLite本身是C寫的,它自帶的API也是C接口的。所以C/C+用起來(lái)最直接了。假如你不喜歡面向過(guò)程的C API風(fēng)格,可以另外找個(gè)C+的包裝庫(kù)。想重新發(fā)明輪子的同學(xué),也可以自己包裝一個(gè)。Java如果要用Java訪問(wèn)SQLite,可以通過(guò)SQLite的JDBC驅(qū)動(dòng),或者通過(guò)專門的SQLite包裝庫(kù)。我個(gè)人建議走JDBC方式,萬(wàn)一將來(lái)要換數(shù)據(jù)庫(kù),代碼就不用大改。Pythonpysqlite是Python操作SQLite的首選。從Python 2.5開(kāi)始,它已經(jīng)被整合到Python的標(biāo)準(zhǔn)庫(kù)中。看來(lái)Python社區(qū)還是蠻喜歡SQLite嘛。.Net對(duì)于喜歡.Net的同學(xué),可以通過(guò)SQLite的ADO.NET驅(qū)動(dòng)來(lái)訪問(wèn)。RubyRuby可以通過(guò)SQLite-Ruby操作SQLite數(shù)據(jù)庫(kù),不過(guò)我沒(méi)用過(guò)。Perl在CPAN上有DBD:SQLite,不過(guò)我也沒(méi)用過(guò)。一些非技術(shù)的參考因素需要根據(jù)“如何選擇開(kāi)源項(xiàng)目”里面提到的幾個(gè)參考因素,再評(píng)估一下。授權(quán)協(xié)議(License)SQLite使用的是Public Domain協(xié)議,這是最爽一種,可以放心大膽地用。用戶的普及程度最近這幾年,使用SQLite的人越來(lái)越多。包括一些大公司也開(kāi)始把它整合到產(chǎn)品中(比如Google的Gears、Apple的Safari、Adobe的AIR)。開(kāi)發(fā)的活躍程度如果到SQLite的Change Log上大致了解一下,可以看出最近5年基本上每1-2個(gè)月都會(huì)有更新。說(shuō)明開(kāi)發(fā)的活躍度還是非常高的。SQLite不同于其他大部分的SQL數(shù)據(jù)庫(kù)引擎,因?yàn)樗氖滓O(shè)計(jì)目標(biāo)就是簡(jiǎn)單化: 易于管理 易于使用 易于嵌入其他大型程序 易于維護(hù)和配置許多人喜歡SQLite因?yàn)樗男∏珊涂焖? 但是這些特性只是它的部分優(yōu)點(diǎn), 使用者還會(huì)發(fā)現(xiàn)SQLite是非常穩(wěn)定的. 出色的穩(wěn)定性源于它的簡(jiǎn)單, 越簡(jiǎn)單就越不容易出錯(cuò). 除了上述的簡(jiǎn)單、小巧和穩(wěn)定性外, 最重要的在于SQLite力爭(zhēng)做到簡(jiǎn)單化. 簡(jiǎn)單化在一個(gè)數(shù)據(jù)庫(kù)引擎中可以說(shuō)是一個(gè)優(yōu)點(diǎn), 但也可能是個(gè)缺點(diǎn), 主要決定于你想要做什么. 為了達(dá)到簡(jiǎn)單化, SQLite省略了一些人們認(rèn)為比較有用的特性, 例如高并發(fā)性、 嚴(yán)格的存取控制、豐富的內(nèi)置功能、 存儲(chǔ)過(guò)程、復(fù)雜的SQL語(yǔ)言特性、 XML以及Java的擴(kuò)展, 超大的萬(wàn)億級(jí)別的數(shù)據(jù)測(cè)量等等. 如果你需要使用上述的這些特性并且不介意它們的復(fù)雜性, 那么SQLite也許就不適合你了. SQLite沒(méi)有打算作為一個(gè)企業(yè)級(jí)的數(shù)據(jù)庫(kù)引擎, 也并不打算和Oracle或者PostgreSQL競(jìng)爭(zhēng). 僅憑經(jīng)驗(yàn)來(lái)說(shuō)SQLite適用于以下場(chǎng)合: 當(dāng)你更看中簡(jiǎn)單的管理、使用和維護(hù)數(shù)據(jù)庫(kù), 而不是那些企業(yè)級(jí)數(shù)據(jù)庫(kù)提供的不計(jì)其數(shù)的復(fù)雜功能的時(shí)候,使用SQLite是一個(gè)比較明智的選擇. 事實(shí)也證明, 人們?cè)谠S多情況下已經(jīng)清楚的認(rèn)識(shí)到簡(jiǎn)單就是最好的選擇. 4.1.1 SQLite最佳試用場(chǎng)合 網(wǎng)站作為數(shù)據(jù)庫(kù)引擎SQLite適用于中小規(guī)模流量的網(wǎng)站(也就是說(shuō), 99.9%的網(wǎng)站). SQLite可以處理多少網(wǎng)站流量在于網(wǎng)站的數(shù)據(jù)庫(kù)有多大的壓力. 通常來(lái)說(shuō), 如果一個(gè)網(wǎng)站的點(diǎn)擊率少于100000次/天的話, SQLite是可以正常運(yùn)行的. 100000次/天是一個(gè)保守的估計(jì), 不是一個(gè)準(zhǔn)確的上限. 事實(shí)證明, 即使是10倍的上述流量的情況下SQLite依然可以正常運(yùn)行. 嵌入式設(shè)備和應(yīng)用軟件因?yàn)镾QLite數(shù)據(jù)庫(kù)幾乎不需要管理, 因此對(duì)于那些無(wú)人值守運(yùn)行或無(wú)人工技術(shù)支持的設(shè)備或服務(wù), SQLite是一個(gè)很好的選擇. SQLite能很好的適用于手機(jī), PDA, 機(jī)頂盒, 以及其他儀器. 作為一個(gè)嵌入式數(shù)據(jù)庫(kù)它也能夠很好的應(yīng)用于客戶端程序. 應(yīng)用程序文件格式SQLite作為桌面應(yīng)用程序的本地磁盤文件格式取得了巨大成功.例如金融分析工具、CAD 包、檔案管理程序等等. 一般的數(shù)據(jù)庫(kù)打開(kāi)操作需要調(diào)用sqlite3_open()函數(shù),并且標(biāo)記一個(gè)顯式本地事務(wù)的起始點(diǎn)(BEGIN TRANSACTION)來(lái)保證以獨(dú)占的方式得到文件的內(nèi)容. 文件保存將執(zhí)行一個(gè)提交(COMMIT)同時(shí)標(biāo)記另一個(gè)顯式本地事務(wù)起始點(diǎn). 這種事務(wù)處理的作用就是保證對(duì)于應(yīng)用程序數(shù)據(jù)文件的更新是原子的、持久的、獨(dú)立的和一致的. 數(shù)據(jù)庫(kù)里可以加入一些臨時(shí)的觸發(fā)器,用來(lái)把所有的改變記錄在一張臨時(shí)的取消/重做日志表中. 當(dāng)用戶按下取消/重做按鈕的時(shí)候這些改變將可以被回滾. 應(yīng)用這項(xiàng)技術(shù)實(shí)現(xiàn)一個(gè)無(wú)限級(jí)的取消/重做功能只需要編寫很少的代碼. 替代某些特別的文件格式許多程序使用fopen(), fread(), 或 fwrite()函數(shù)創(chuàng)建和管理一些自定義的文件用來(lái)保存數(shù)據(jù). 使用SQLite替代這些自定義的文件格式將是一種很好的選擇. 內(nèi)部的或臨時(shí)的數(shù)據(jù)庫(kù)對(duì)于那些有大量的數(shù)據(jù)需要用不同的方式篩選分類的程序, 相對(duì)于編寫同樣功能的代碼, 如果你把數(shù)據(jù)讀入一個(gè)內(nèi)存中的SQLite數(shù)據(jù)庫(kù), 然后使用連接查詢和ORDER BY子句按一定的順序和排列提取需要的數(shù)據(jù), 通常會(huì)更簡(jiǎn)單和快速. 按照上述的方法使用內(nèi)嵌的SQLite數(shù)據(jù)庫(kù)將會(huì)使程序更富有靈活性, 因?yàn)樘砑有碌牧谢蛩饕挥弥貙懭魏尾樵冋Z(yǔ)句. 命令行數(shù)據(jù)集分析工具有經(jīng)驗(yàn)的SQL用戶可以使用SQLite命令行程序去分析各種混雜的數(shù)據(jù)集. 原是數(shù)據(jù)可以從CSV(逗號(hào)分隔值文件)文件中導(dǎo)入, 然后被切分產(chǎn)生無(wú)數(shù)的綜合數(shù)據(jù)報(bào)告. 可能得用法包括網(wǎng)站日志分析, 運(yùn)動(dòng)統(tǒng)計(jì)分析, 編輯規(guī)劃標(biāo)準(zhǔn), 分析試驗(yàn)結(jié)果. 當(dāng)然你也可以用企業(yè)級(jí)的客戶端/服務(wù)器數(shù)據(jù)庫(kù)來(lái)做同樣的事情. 在這種情況下使用SQLite的好處是: SQLite的部署更為簡(jiǎn)單并且結(jié)果數(shù)據(jù)庫(kù)是一個(gè)單獨(dú)的文件, 你可以把它存儲(chǔ)在軟盤或者優(yōu)盤或者直接通過(guò)email發(fā)給同事. 在Demo或測(cè)試版的時(shí)候作為企業(yè)級(jí)數(shù)據(jù)庫(kù)的替代品如果你正在編寫一個(gè)使用企業(yè)級(jí)數(shù)據(jù)庫(kù)引擎的客戶端程序, 使用一個(gè)允許你連接不同SQL數(shù)據(jù)庫(kù)引擎的通用型數(shù)據(jù)庫(kù)后臺(tái)將是很有意義的. 其更大的意義在于將SQLite數(shù)據(jù)庫(kù)引擎靜態(tài)的連接到客戶端程序當(dāng)中,從而內(nèi)嵌SQLite作為混合的數(shù)據(jù)庫(kù)支持. 這樣客戶端程序就可以使用SQLite數(shù)據(jù)庫(kù)文件做獨(dú)立的測(cè)試或者驗(yàn)證. 數(shù)據(jù)庫(kù)教學(xué)因?yàn)镾QLite的安裝和使用非常的簡(jiǎn)單(安裝過(guò)程幾乎忽略不計(jì), 只需要拷貝SQLite源代碼或sqlite.exe可執(zhí)行文件到目標(biāo)主機(jī), 然后直接運(yùn)行就可以) 所以它非常適合用來(lái)講解SQL語(yǔ)句. 同學(xué)們可以非常簡(jiǎn)單的創(chuàng)建他們喜歡的數(shù)據(jù)庫(kù), 然后通過(guò)電子郵件發(fā)給老師批注或打分. 對(duì)于那些感興趣怎樣實(shí)現(xiàn)一個(gè)關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS)的高層次的學(xué)生, 按照模塊化設(shè)計(jì)且擁有很好的注釋和文檔的SQLite源代碼, 將為他們打下良好的基礎(chǔ). 這并不是說(shuō)SQLite就是如何實(shí)現(xiàn)其他數(shù)據(jù)庫(kù)引擎的精確模型, 但是很適合學(xué)生們了解SQLite是如何快速工作的, 從而掌握其他數(shù)據(jù)庫(kù)系統(tǒng)的設(shè)計(jì)實(shí)現(xiàn)原則. 試驗(yàn)SQL語(yǔ)言的擴(kuò)展SQLite簡(jiǎn)單且模塊化的設(shè)計(jì)使得它可以成為一個(gè)用來(lái)測(cè)試數(shù)據(jù)庫(kù)語(yǔ)言特性或新想法的優(yōu)秀的原型平臺(tái)4.1.2 哪些場(chǎng)合適合使用其他的關(guān)系型數(shù)據(jù)庫(kù)管理系統(tǒng)(RDBMS) 客戶端/服務(wù)器程序 如果你有許多的客戶端程序要通過(guò)網(wǎng)絡(luò)訪問(wèn)一個(gè)共享的數(shù)據(jù)庫(kù), 你應(yīng)當(dāng)考慮用一個(gè)客戶端/服務(wù)器數(shù)據(jù)庫(kù)來(lái)替代SQLite. SQLite可以通過(guò)網(wǎng)絡(luò)文件系統(tǒng)工作, 但是因?yàn)楹痛蠖鄶?shù)網(wǎng)絡(luò)文件系統(tǒng)都存在延時(shí), 因此執(zhí)行效率不會(huì)很高. 此外大多數(shù)網(wǎng)絡(luò)文件系統(tǒng)在實(shí)現(xiàn)文件邏輯鎖的方面都存在著bug(包括Unix 和windows). 如果文件鎖沒(méi)有正常的工作, 就可能出現(xiàn)在同一時(shí)間兩個(gè)或更多的客戶端程序更改同一個(gè)數(shù)據(jù)庫(kù)的同一部分, 從而導(dǎo)致數(shù)據(jù)庫(kù)出錯(cuò). 因?yàn)檫@些問(wèn)題是文件系統(tǒng)執(zhí)行的時(shí)候本質(zhì)上存在的bug, 因此SQLite沒(méi)有辦法避免它們.好的經(jīng)驗(yàn)告訴我們, 應(yīng)該避免在許多計(jì)算機(jī)需要通過(guò)一個(gè)網(wǎng)絡(luò)文件系統(tǒng)同時(shí)訪問(wèn)同一個(gè)數(shù)據(jù)庫(kù)的情況下使用SQLite. 高流量網(wǎng)站SQLite通常情況下用作一個(gè)網(wǎng)站的后臺(tái)數(shù)據(jù)庫(kù)可以很好的工作. 但是如果你的網(wǎng)站的訪問(wèn)量大到你開(kāi)始考慮采取分布式的數(shù)據(jù)庫(kù)部署, 那么你應(yīng)當(dāng)毫不猶豫的考慮用一個(gè)企業(yè)級(jí)的客戶端/服務(wù)器數(shù)據(jù)庫(kù)來(lái)替代SQLite. 超大的數(shù)據(jù)集當(dāng)你在SQLite中開(kāi)始一個(gè)事務(wù)處理的時(shí)候(事務(wù)處理會(huì)在任何寫操作發(fā)生之前產(chǎn)生, 而不是必須要顯示的調(diào)用BEGIN.COMMIT), 數(shù)據(jù)庫(kù)引擎將不得不分配一小塊臟頁(yè)(文件緩沖頁(yè)面)來(lái)幫助它自己管理回滾操作. 每1MB的數(shù)據(jù)庫(kù)文件SQLite需要256字節(jié). 對(duì)于小型的數(shù)據(jù)庫(kù)這些空間不算什么, 但是當(dāng)數(shù)據(jù)庫(kù)增長(zhǎng)到數(shù)十億字節(jié)的時(shí)候, 緩沖頁(yè)面的尺寸就會(huì)相當(dāng)?shù)拇罅? 如果你需要存儲(chǔ)或修改幾十GB的數(shù)據(jù), 你應(yīng)該考慮用其他的數(shù)據(jù)庫(kù)引擎. 高并發(fā)訪問(wèn)SQLite對(duì)于整個(gè)數(shù)據(jù)庫(kù)文件進(jìn)行讀取/寫入鎖定. 這意味著如果任何進(jìn)程讀取了數(shù)據(jù)庫(kù)中的某一部分, 其他所有進(jìn)程都不能再對(duì)該數(shù)據(jù)庫(kù)的任何部分進(jìn)行寫入操作. 同樣的, 如果任何一個(gè)進(jìn)程在對(duì)數(shù)據(jù)庫(kù)進(jìn)行寫入操作, 其他所有進(jìn)程都不能再讀取該數(shù)據(jù)庫(kù)的任何部分. 對(duì)于大多數(shù)情況這不算是什么問(wèn)題. 在這些情況下每個(gè)程序使用數(shù)據(jù)庫(kù)的時(shí)間都很短暫, 并且不會(huì)獨(dú)占, 這樣鎖定至多會(huì)存在十幾毫秒. 但是如果有些程序需要高并發(fā), 那么這些程序就需要尋找其他的解決方案了.方面具體要求必要條件詳細(xì)描述License是否收費(fèi)免費(fèi)使用是否開(kāi)源開(kāi)源是否有技術(shù)支持主要是社區(qū)支持,如果需要專業(yè)支持需要購(gòu)買商業(yè)目的的分發(fā)版本是否仍要收費(fèi)是免費(fèi)其他性能數(shù)據(jù)容量支持100000條以上記錄是支持并發(fā)查詢處理能力SQLite在并發(fā)(包括多進(jìn)程和多線程)讀寫方面的性能一直不太理想。數(shù)據(jù)庫(kù)可能會(huì)被寫操作獨(dú)占,從而導(dǎo)致其它讀寫操作阻塞或出錯(cuò)。查詢速度是修改速度是平臺(tái)支持32/64位全部支持Linux/window/UNIX/mobile支持Linux/Mac OS/Windows運(yùn)行方式支持支持嵌入式支持支持獨(dú)立運(yùn)行不支持連接方式支持支持ODBC默認(rèn)不支持,必須通過(guò)第三方的ODBC驅(qū)動(dòng)支持JDBC默認(rèn)不支持,必須通過(guò)第三方的JDBC驅(qū)動(dòng)支持內(nèi)存訪問(wèn)通過(guò)c接口(專用API)支持網(wǎng)絡(luò)訪問(wèn)不支持SQL支持支持SQL是支持支持Index,Trigger,Constrains,Views支持,有資料說(shuō)其不支持外鍵約束。管理界面支持管理界面支持CLI管理界面友好程度較差6 4.2 AltibaseAltibase內(nèi)存數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS),內(nèi)存數(shù)據(jù)管理系統(tǒng)的最新技術(shù),是一個(gè)在事務(wù)優(yōu)先的環(huán)境中提供高性能和高可用性的軟件解決方案。Altibase提供極限性能、容錯(cuò)能力和事務(wù)管理的方便性,特別是在通信、網(wǎng)上銀行、證券交易、實(shí)時(shí)應(yīng)用和嵌入式系統(tǒng)領(lǐng)域。Altibase能夠最大限度的發(fā)揮數(shù)據(jù)庫(kù)服務(wù)系統(tǒng)的潛力,使用Altibase能大大增強(qiáng)您公司的數(shù)據(jù)服務(wù)器的處理能力。Altibase內(nèi)存DBMS為需要容錯(cuò)服務(wù)的系統(tǒng)提供實(shí)時(shí)數(shù)據(jù)庫(kù)復(fù)制的功能。采用Altibase數(shù)據(jù)庫(kù)復(fù)制的系統(tǒng)可以實(shí)現(xiàn)高性能、高可用性、數(shù)據(jù)庫(kù)一致性、負(fù)載平衡和系統(tǒng)可伸縮性。如果您希望您的業(yè)務(wù)能夠?qū)崿F(xiàn)最大的成功,請(qǐng)?jiān)谀氖聞?wù)優(yōu)先的系統(tǒng)中使用我們的Altibase數(shù)據(jù)庫(kù)復(fù)制解決方案。資料比較少,且需要商業(yè)License,沒(méi)有詳細(xì)去研究7 4.3 Oracle 內(nèi)存數(shù)據(jù)庫(kù)系列 Berkeley DB 和 TimesTenOracle是最重要的商業(yè)數(shù)據(jù)庫(kù)產(chǎn)品提供商,它也有內(nèi)存數(shù)據(jù)庫(kù)的產(chǎn)品系列:主要就是Oracle Berkeley DB 和 Times Ten.前者是只支持嵌入式內(nèi)存數(shù)據(jù),后者是獨(dú)立的內(nèi)存優(yōu)化數(shù)據(jù)庫(kù)。4.3.1 Oracle Berkeley DB Oracle Berkeley DB是Oracle 收購(gòu)了開(kāi)源數(shù)據(jù)庫(kù)廠商后推出的產(chǎn)品,其前身是Berkeley DB。它有開(kāi)源版本,但且對(duì)于開(kāi)源軟件免費(fèi)。商業(yè)版本是要付費(fèi)。Oracle Berkeley DB 系列的可嵌入開(kāi)源數(shù)據(jù)庫(kù)為開(kāi)發(fā)人員提供了無(wú)需管理的快速、可靠的本地持久性。Oracle Berkeley DB 系列通常部署為“前沿”數(shù)據(jù)庫(kù),為不需要 SQL 的應(yīng)用程序用例提供很高的性能、可靠性、可伸縮性以及可用性。Oracle Berkeley DB 產(chǎn)品系列 Berkeley DB 事務(wù)處理式存儲(chǔ)引擎,用于基本鍵/值數(shù)據(jù)結(jié)構(gòu)中的非類型化數(shù)據(jù) 新增!版本 4.7 現(xiàn)已推出 針對(duì) Java 環(huán)境優(yōu)化的純 Java 版 Berkeley DB 新增!版本 3.3 Berkeley DB XML 原生 XML 數(shù)據(jù)庫(kù),可基于 XQuery 訪問(wèn)容器中存儲(chǔ)的文檔,并根據(jù)其內(nèi)容進(jìn)行索引 新增!版本 2.4 現(xiàn)已推出4.3.2 Oracle TimesTen Oracle 內(nèi)存數(shù)據(jù)庫(kù) TimesTen 是一個(gè)針對(duì)內(nèi)存進(jìn)行了優(yōu)化的關(guān)系數(shù)據(jù)庫(kù),它為應(yīng)用程序提供了當(dāng)今實(shí)時(shí)企業(yè)和行業(yè)(如電信、資本市場(chǎng)和國(guó)防)所需的即時(shí)響應(yīng)性和非常高的吞吐量。Oracle 內(nèi)存數(shù)據(jù)庫(kù) TimesTen 作為獨(dú)立或嵌入式數(shù)據(jù)庫(kù)部署在應(yīng)用層中,利用標(biāo)準(zhǔn)的 SQL 接口對(duì)完全位于物理內(nèi)存中的數(shù)據(jù)庫(kù)進(jìn)行操作。它也可以用作 Oracle 數(shù)據(jù)庫(kù)的內(nèi)存中數(shù)據(jù)庫(kù)緩存,以改進(jìn)用戶應(yīng)用程序的響應(yīng)時(shí)間和吞吐量。 8 4.4 eXtremeDBeXtremeDB內(nèi)存式實(shí)時(shí)數(shù)據(jù)庫(kù)是為實(shí)時(shí)系統(tǒng)及嵌入式系統(tǒng)而特別設(shè)計(jì)的數(shù)據(jù)庫(kù)。與同類產(chǎn)品不同,eXtremeDB不是通過(guò) 對(duì)企業(yè)數(shù)據(jù)庫(kù)面向?qū)崟r(shí)嵌入式應(yīng)用進(jìn)行剪裁而來(lái);而是總結(jié)了30年來(lái)McObject公司在編譯器、實(shí)時(shí)編程、數(shù)據(jù)管理、內(nèi)核級(jí)驅(qū) 動(dòng)軟件等領(lǐng)域的經(jīng)驗(yàn),面向?qū)崟r(shí)嵌入式應(yīng)用從頭開(kāi)發(fā)的最新實(shí)時(shí)數(shù)據(jù)管理技術(shù)。eXtremeDB滿足了您對(duì)實(shí)時(shí)數(shù)據(jù)庫(kù)的一切期待:高級(jí)數(shù)據(jù)定義語(yǔ)言、并行訪問(wèn)、基于交易及靈活的索引 等等。不僅如此,出乎您的意外,eXtremeDB在緊湊的引擎中還提供諸如事件觸發(fā)、目標(biāo)歷史等等功能。eXtremeDB嵌入式數(shù)據(jù)庫(kù)滿足更多的實(shí)時(shí)開(kāi)發(fā)的要求。 最快的內(nèi)存數(shù)據(jù)庫(kù)。 極小尺寸和極小的內(nèi)存消耗 多種索引支持 高可用性-組合選項(xiàng) 非常靈活的數(shù)據(jù)存儲(chǔ): 內(nèi)存式,磁盤式或混合式 多種應(yīng)用接口: 兩種 SQL, 兩種更快的原始接口 幾乎牢不可破 -又一個(gè)商業(yè)內(nèi)存數(shù)據(jù)庫(kù)產(chǎn)品,這個(gè)特點(diǎn)是實(shí)時(shí)數(shù)據(jù)庫(kù),號(hào)稱最快。4.5 H2 Database h2是Thomas Mueller提供的一個(gè)開(kāi)源的、純java實(shí)現(xiàn)的關(guān)系數(shù)據(jù)庫(kù),官方網(wǎng)站:/html/main.html。 它的主要特性是: 非常速的數(shù)據(jù)庫(kù)引擎 開(kāi)源、免費(fèi)數(shù)據(jù)庫(kù) 支持 JDBC和ODBC API,支持SQL 支持嵌入式,服務(wù)器和集群模式。支持內(nèi)存數(shù)據(jù)庫(kù)。 提供基于瀏覽器的管理控制臺(tái) 整個(gè)應(yīng)用本身只有1MB左右。其他特性還包括 基于磁盤或內(nèi)存的數(shù)據(jù)庫(kù)、表,支持只讀數(shù)據(jù)庫(kù)、臨時(shí)表。 兩段式事務(wù)支持 支持多個(gè)連接。表級(jí)別的鎖。 基于成本的優(yōu)化,為復(fù)雜查詢使用遺傳算法,零管理。 滾動(dòng)的、可修改的result set支持。支持大結(jié)果集、外部結(jié)果排序。 加密數(shù)據(jù)庫(kù)(AES或XTEA),SHA-256密碼加密。性能比較(摘自h2database網(wǎng)站)嵌入模式下H2的性能比較Test Case Unit H2 HSQLDB Derby Simple: Init ms 610 657 3187 Simple: Query (random) ms 297 312 1828 Simple: Query (sequential) ms 203 266 1766 Simple: Update (random) ms 1078 1484 22031 Simple: Delete (sequential) ms 234 281 7407 Simple: Memory Usage MB 6 7 11 BenchA: Init ms 859 438 4047 BenchA: Transactions ms 5266 2875 17500 BenchA: Memory Usage MB 9 14 10 BenchB: Init ms 4016 2687 16875 BenchB: Transactions ms 2609 3282 4250 BenchB: Memory Usage MB 9 10 8 BenchC: Init ms 891 594 5766 BenchC: Transactions ms 4359 75438 11718 BenchC: Memory Usage MB 9 18 9 Executed statements # 594255 594255 594255 Total time ms 20422 88314 96375 Statements per second # 29098 6728 6166 .Net使用H2 1. 嵌入式應(yīng)用。有一個(gè)項(xiàng)目在為.Net使用H2,使用CLI重新編譯H2。還沒(méi)有深入關(guān)注。2. ODBC。但性能一般。9 4.5 其他內(nèi)存數(shù)據(jù)庫(kù)包括Derby, HSQLDB等.-In-memory database in wikipedia: (/wiki/In-memory_database)Products Product nameLicenseDescriptionAdaptive Server Enterprise (ASE) 15.5Proprietaryenterprise database from Sybase)4Apache DerbyApache License 2.0Java RDBMSAltibaseProprietaryhas in-memory and disk table; HYBRID DBMSBlackRayGNU General Public Licence (GPLv2) and BSD LicenseCSQLGNU General Public Licence or proprietaryDatablitzProprietaryDBMSEloqueraProprietaryIn-memory, In-memory:persist modeseXtremeDBcommercial productDBMS, also check out its open source PERST dbms.FleetDBMITNOSQL db with Writing to an append-only log to provide durability.H2Mozilla Public License or Eclipse Public Licensehas a memory-only modeHSQLDBBSD licensehas a memory-only modeIBM TM1Proprietaryin-memory BI and data analysisInfoZoomProprietar

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論