1.內存數據庫簡介 1.概念 2.內存數據庫歷史和發展 3.常用內存數據庫 1.SQLite 1.SQLite最佳試用場合 2.哪些場合適合使用其他的關系型數據庫管理系統RDBMS 2.Altibase 3.Oracle 內存數據庫系列 Berkeley DB 和 TimesTen 1.Oracle Berkeley DB 2.Oracle TimesTen 4.eXtremeDB 1.嵌入模式下H2的性能比較 2.Net使用H2 5.其他內存數據庫
1. 內存數據庫簡介
1.1 概念
一、什么是內存數據庫
傳統的數據庫管理系統把所有數據都放在磁盤上進行管理,所以稱做磁盤數據庫(DRDB:Disk-Resident Database)。磁盤數據庫需要頻繁地訪問磁盤來進行數據的操作,由於對磁盤讀寫數據的操作一方面要進行磁頭的機械移動,另一方面受到系統調用(通常通過CPU中斷完成,受到CPU時鍾周期的制約)時間的影響,當數據量很大,操作頻繁且復雜時,就會暴露出很多問題。
近年來,內存容量不斷提高,價格不斷下跌,操作系統已經可以支持更大的地址空間(計算機進入了64位時代),同時對數據庫系統實時響應能力要求日益提高,充分利用內存技術提升數據庫性能成為一個熱點。
在數據庫技術中,目前主要有兩種方法來使用大量的內存。一種是在傳統的數據庫中,增大緩沖池,將一個事務所涉及的數據都放在緩沖池中,組織成相應的數據結構來進行查詢和更新處理,也就是常說的共享內存技術,這種方法優化的主要目標是最小化磁盤訪問。另一種就是內存數據庫(MMDB:Main Memory Database,也叫主存數據庫)技術,就是干脆重新設計一種數據庫管理系統,對查詢處理、並發控制與恢復的算法和數據結構進行重新設計,以更有效地使用CPU周期和內存,這種技術近乎把整個數據庫放進內存中,因而會產生一些根本性的變化。兩種技術的區別如下表:
內存數據庫系統帶來的優越性能不僅僅在於對內存讀寫比對磁盤讀寫快上,更重要的是,從根本上拋棄了磁盤數據管理的許多傳統方式,基於全部數據都在內存中管理進行了新的體系結構的設計,並且在數據緩存、快速算法、並行操作方面也進行了相應的改進,從而使數據處理速度一般比傳統數據庫的數據處理速度快很多,一般都在10倍以上,理想情況甚至可以達到1000倍。
而使用共享內存技術的實時系統和使用內存數據庫相比有很多不足,由於優化的目標仍然集中在最小化磁盤訪問上,很難滿足完整的數據庫管理的要求,設計的非標准化和軟件的專用性造成可伸縮性、可用性和系統的效率都非常低,對於快速部署和簡化維護都是不利的。
2. 內存數據庫歷史和發展
一、雛形期 從上個世紀60年代末到80年代初。在這個時期中,出現了主存數據庫的雛形。1969年IBM公司研制了世界上最早的數據庫管理系統------基於層次模型的數據庫管理系統IMS,並作為商品化軟件投入市場。在設計IMS時,IBM考慮到基於內存的數據管理方法,相應推出了IMS/VS Fast Path。Fast Path是一個支持內存駐留數據的商業化數據庫,但它同時也可以很好地支持磁盤駐留數據。在這個產品中體現了主存數據庫的主要設計思想,也就是將需要頻繁訪問,要求高響應速度的數據直接存放在物理內存中訪問和管理。在這個階段中,包括網狀數據庫、關系數據庫等其他各種數據庫技術也都逐漸成型。 二、技術理論成熟期 1984年,D J DeWitt等人發表了《主存數據庫系統的實現技術》一文。第一次提出了Main Memory Database(主存數據庫)的概念。預言當時異常昂貴的計算機主存價格一定會下降,用戶有可能將大容量的數據庫全部保存在主存中,提出了AVL樹、哈希算法、主存數據庫恢復機制等主存數據庫技術的關鍵理論,為主存數據庫的發展指出了明確的方向 。 1984年,D J DeWitt等人提出使用非易逝內存或預提交和成組提交技術作為主存數據庫的提交處理方案,使用指針實現主存數據庫的存取訪問。 1985年,IBM推出了IBM 370上運行的OBE主存數據庫 1986年,RB Hagman提出了使用檢查點技術實現主存數據庫的恢復機制。威斯康星大學提出了按區雙向鎖定模式解決主存數據庫中的並發控制問題。並設計出MM-DBMS主存數據庫。貝爾實驗室推出了DALI主存數據庫模型。 1987年,ACM SIGMOD會議中提出了以堆文件(HEAP FILE)作為主存數據庫的數據存儲結構。Southern Methodist大學設計出MARS主存數據庫模型。 1988年普林斯頓大學設計出TPK主存數據庫。 1990年普林斯頓大學又設計出System M主存數據庫。 三、產品發展期和市場成長期 隨着互聯網的發展,越來越多的網絡應用系統需要能夠支持大用戶量並發訪問、高響應速度的的數據庫系統,主存數據庫市場成熟 半導體技術快速發展,半導體內存大規模生產,動態隨機存取存儲器(DRAM)的容量越來越大,而價格越來越低,這無疑為計算機內存的不斷擴大提供了硬件基礎,使得主存數據庫的技術可行性逐步成熟 1994年美國OSE公司推出了第一個商業化的,開始實際應用的主存數據庫產品Polyhedra 1998年德國SoftwareAG推出了Tamino Database。 1999年日本UBIT會社開發出XDB主存數據庫產品。韓國Altibase推出Altibase 2000年奧地利的QuiLogic公司推出了SQL-IMDB 2001年美國McObject推出eXtremeDB。加拿大Empress公司推出EmpressDB
四、幾種主存技術應用的比較 第一代:用戶定制的主存數據庫。通過應用程序來管理內存和數據;不支持SQL語句, 不提供本地存儲, 沒有數據庫恢復技術;性能好但很難維護和在別的應用中不能使用;應用在實時領域比如工廠自動化生產。 第二代:簡單功能的內存數據庫。能夠快速處理簡單的查詢;支持部分的 SQL語句和簡單的恢復技術;主要目的是能夠快速處理大量事務;針對簡單事務處理領域,尤其是交換機, 移動通信等。 第三代:通用的主存數據庫。針對傳統的商業關系型數據庫領域,能夠提供更高的性能、通用性以及穩定性;提供不同的接口來處理復雜的SQL語句和滿足不同的應用領域;可以應用在計費、電子商務、在線安全領域,幾乎包括磁盤數據庫的所有應用領域。 五、目前幾種常見的通用內存數據庫 eXtremeDB:eXtremeDB實時數據庫是McObject公司的一款特別為實時與嵌入式系統數據管理而設計的數據庫,只有50K到130K的開銷,速度達到微秒級。eXtremeDB完全駐留在主內存中,不使用文件系統(包括內存盤)。eXtremeDB采用了新的磁盤融合技術,將內存拓展到磁盤,將磁盤當做虛擬內存來用,實時性能保持微秒級的同時,數據管理量在32BIT下能達到20G。 Oracle TimesTen:Oracle TimesTen是Oracle從TimesTen公司收購的一個內存優化的關系數據庫,它為應用程序提供了實時企業和行業(例如電信、資本市場和國防)所需的即時響應性和非常高的吞吐量。Oracle TimesTen可作為高速緩存或嵌入式數據庫被部署在應用程序層中,它利用標准的 SQL 接口對完全位於物理內存中的數據存儲區進行操作。 SolidDB:Solid Information Technology 成立於 1992 年,全球總部位於加州Cupertino, Solid數據管理平台將基於內存和磁盤的全事務處理數據庫引擎、載體級高可用性及強大的數據復制功能緊密地融為一體。
ALTIBASE公司從1999年就一直致力於內存數據庫軟件和其應用的開發,提供高性能和高可用性的軟件解決方案。特別適合通信、網上銀行、證券交易、實時應用和嵌入式系統領域。目前占據80%以上內存數據庫市場,可以說是當今數據庫軟件技術的領導者。目前Altibase在國內成功案例也比較多,尤其是在電信行業,已經得到了廣泛認可.
4. 常用內存數據庫
4.1 SQLite
SQLite是一個小型的C程序庫,實現了獨立的,可嵌入的,零配置的SQL數據庫引擎。特性包括:
- 事務操作是原子,一致,孤立,並且持久的(ACID),即使在系統崩潰和電源故障之后。
- 零配置——不需要安裝和管理。
- 實現了絕大多數SQL92標准。
- 整個數據庫存儲在一個單一的文件中。
- 數據庫文件可以在不同字節序的機器之間自由地共享。
- 支持最大可達2T的數據庫。 (241 字節)
- 字符串和BLOB類型的大小最大可達 2G 字節(231字節)。
- 小的代碼: 完整配置的少於250KB,忽略一些可選特性的少於150KB。
- 在大多數常見操作上比流行的客戶/服務器數據庫引擎更快。
- 簡單,易於使用的API。
- 內建TCL綁定。 另外提供可用於許多其他語言的綁定。
- 具有良好注釋的源代碼,95%經過測試。
- 獨立:沒有外部依賴。
- 源代碼位於公共域。 可用於任何用途。
SQLite發行版包含一個獨立的命令行訪問程序(sqlite),可用於管理SQLite數據庫,並適合作為一個如何使用SQLite庫的例子。
License: SQLite使用Public domain授權(注),對於個人使用和商業使用都是免費的。
技術上的優點和特性 SQLite是一個輕量級、跨平台的關系型數據庫。
◇輕量級
先說它的第一個特色:輕量級。想必SQLite的作者很看重這個特性,連它的Logo都是用的“羽毛”,來顯擺它的輕飄飄。SQLite和C/S模式的數據庫軟件不同,它是進程內的數據庫引擎,因此不存在數據庫的客戶端和服務器。使用SQLite一般只需要帶上它的一個動態庫,就可以享受它的全部功能。而且那個動態庫的尺寸也挺小,以版本3.6.11為例,Windows下487KB、Linux下347KB。
◇ 綠色軟件
SQLite的另外一個特點是綠色:它的核心引擎本身不依賴第三方的軟件,使用它也不需要“安裝”。所以在部署的時候能夠省去不少麻煩。
◇單一文件
所謂的“單一文件”,就是數據庫中所有的信息(比如表、視圖、觸發器、等)都包含在一個文件內。這個文件可以copy到其它目錄或其它機器上,也照用不誤。
★技術上的缺點和不足
◇並發訪問的鎖機制 SQLite在並發(包括多進程和多線程)讀寫方面的性能一直不太理想。數據庫可能會被寫操作獨占,從而導致其它讀寫操作阻塞或出錯。
SQL標准支持不全 在它的官方網站上,具體列舉了不支持哪些SQL92標准。我個人感覺比較不爽的是不支持外鍵約束。
◇網絡文件系統(以下簡稱NFS) 有時候需要訪問其它機器上的SQLite數據庫文件,就會把數據庫文件放置到網絡共享目錄上。這時候你就要小心了。當SQLite文件放置於NFS時,在並發讀寫的情況下可能會出問題(比如數據損壞)。原因據說是由於某些NFS的文件鎖實現上有Bug。
★編程語言接口 SQLite支持很多種語言的編程接口。這對於我這種喜歡混用多種編程語言的人來說,是很爽的。下面我大概介紹一下。
◇C/C++ 由於SQLite本身是C寫的,它自帶的API也是C接口的。所以C/C++用起來最直接了。假如你不喜歡面向過程的C API風格,可以另外找個C++的包裝庫。想重新發明輪子的同學,也可以自己包裝一個。 ◇Java 如果要用Java訪問SQLite,可以通過SQLite的JDBC驅動,或者通過專門的SQLite包裝庫。我個人建議走JDBC方式,萬一將來要換數據庫,代碼就不用大改。 ◇Python pysqlite是Python操作SQLite的首選。從Python 2.5開始,它已經被整合到Python的標准庫中。看來Python社區還是蠻喜歡SQLite嘛。 ◇.Net 對於喜歡.Net的同學,可以通過SQLite的ADO.NET驅動來訪問。 ◇Ruby Ruby可以通過SQLite-Ruby操作SQLite數據庫,不過我沒用過。 ◇Perl 在CPAN上有DBD::SQLite,不過我也沒用過。
★一些非技術的參考因素
需要根據“如何選擇開源項目”里面提到的幾個參考因素,再評估一下。 ◇授權協議(License) SQLite使用的是Public Domain協議,這是最爽一種,可以放心大膽地用。 ◇用戶的普及程度 最近這幾年,使用SQLite的人越來越多。包括一些大公司也開始把它整合到產品中(比如Google的Gears、Apple的Safari、Adobe的AIR)。 ◇開發的活躍程度 如果到SQLite的Change Log上大致了解一下,可以看出最近5年基本上每1-2個月都會有更新。說明開發的活躍度還是非常高的。
SQLite不同於其他大部分的SQL數據庫引擎,因為它的首要設計目標就是簡單化:
- 易於管理
- 易於使用
- 易於嵌入其他大型程序
- 易於維護和配置
許多人喜歡SQLite因為它的小巧和快速. 但是這些特性只是它的部分優點, 使用者還會發現SQLite是非常穩定的. 出色的穩定性源於它的簡單, 越簡單就越不容易出錯. 除了上述的簡單、小巧和穩定性外, 最重要的在於SQLite力爭做到簡單化.
簡單化在一個數據庫引擎中可以說是一個優點, 但也可能是個缺點, 主要決定於你想要做什么. 為了達到簡單化, SQLite省略了一些人們認為比較有用的特性, 例如高並發性、 嚴格的存取控制、豐富的內置功能、 存儲過程、復雜的SQL語言特性、 XML以及Java的擴展, 超大的萬億級別的數據測量等等. 如果你需要使用上述的這些特性並且不介意它們的復雜性, 那么SQLite也許就不適合你了. SQLite沒有打算作為一個企業級的數據庫引擎, 也並不打算和Oracle或者PostgreSQL競爭.
僅憑經驗來說SQLite適用於以下場合: 當你更看中簡單的管理、使用和維護數據庫, 而不是那些企業級數據庫提供的不計其數的復雜功能的時候,使用SQLite是一個比較明智的選擇. 事實也證明, 人們在許多情況下已經清楚的認識到簡單就是最好的選擇.
4.1.1 SQLite最佳試用場合
· 網站
作為數據庫引擎SQLite適用於中小規模流量的網站(也就是說, 99.9%的網站). SQLite可以處理多少網站流量在於網站的數據庫有多大的壓力. 通常來說, 如果一個網站的點擊率少於100000次/天的話, SQLite是可以正常運行的. 100000次/天是一個保守的估計, 不是一個准確的上限. 事實證明, 即使是10倍的上述流量的情況下SQLite依然可以正常運行.
· 嵌入式設備和應用軟件
因為SQLite數據庫幾乎不需要管理, 因此對於那些無人值守運行或無人工技術支持的設備或服務, SQLite是一個很好的選擇. SQLite能很好的適用於手機, PDA, 機頂盒, 以及其他儀器. 作為一個嵌入式數據庫它也能夠很好的應用於客戶端程序.
· 應用程序文件格式
SQLite作為桌面應用程序的本地磁盤文件格式取得了巨大成功.例如金融分析工具、CAD 包、檔案管理程序等等. 一般的數據庫打開操作需要調用sqlite3_open()函數,並且標記一個顯式本地事務的起始點(BEGIN TRANSACTION)來保證以獨占的方式得到文件的內容. 文件保存將執行一個提交(COMMIT)同時標記另一個顯式本地事務起始點. 這種事務處理的作用就是保證對於應用程序數據文件的更新是原子的、持久的、獨立的和一致的.
數據庫里可以加入一些臨時的觸發器,用來把所有的改變記錄在一張臨時的取消/重做日志表中. 當用戶按下取消/重做按鈕的時候這些改變將可以被回滾. 應用這項技術實現一個無限級的取消/重做功能只需要編寫很少的代碼.
· 替代某些特別的文件格式
許多程序使用fopen(), fread(), 或 fwrite()函數創建和管理一些自定義的文件用來保存數據. 使用SQLite替代這些自定義的文件格式將是一種很好的選擇.
· 內部的或臨時的數據庫
對於那些有大量的數據需要用不同的方式篩選分類的程序, 相對於編寫同樣功能的代碼, 如果你把數據讀入一個內存中的SQLite數據庫, 然后使用連接查詢和ORDER BY子句按一定的順序和排列提取需要的數據, 通常會更簡單和快速. 按照上述的方法使用內嵌的SQLite數據庫將會使程序更富有靈活性, 因為添加新的列或索引不用重寫任何查詢語句.
· 命令行數據集分析工具
有經驗的SQL用戶可以使用SQLite命令行程序去分析各種混雜的數據集. 原是數據可以從CSV(逗號分隔值文件)文件中導入, 然后被切分產生無數的綜合數據報告. 可能得用法包括網站日志分析, 運動統計分析, 編輯規划標准, 分析試驗結果.
當然你也可以用企業級的客戶端/服務器數據庫來做同樣的事情. 在這種情況下使用SQLite的好處是: SQLite的部署更為簡單並且結果數據庫是一個單獨的文件, 你可以把它存儲在軟盤或者優盤或者直接通過email發給同事.
· 在Demo或測試版的時候作為企業級數據庫的替代品
如果你正在編寫一個使用企業級數據庫引擎的客戶端程序, 使用一個允許你連接不同SQL數據庫引擎的通用型數據庫后台將是很有意義的. 其更大的意義在於將SQLite數據庫引擎靜態的連接到客戶端程序當中,從而內嵌SQLite作為混合的數據庫支持. 這樣客戶端程序就可以使用SQLite數據庫文件做獨立的測試或者驗證.
· 數據庫教學
因為SQLite的安裝和使用非常的簡單(安裝過程幾乎忽略不計, 只需要拷貝SQLite源代碼或sqlite.exe可執行文件到目標主機, 然后直接運行就可以) 所以它非常適合用來講解SQL語句. 同學們可以非常簡單的創建他們喜歡的數據庫, 然后通過電子郵件發給老師批注或打分. 對於那些感興趣怎樣實現一個關系型數據庫管理系統(RDBMS)的高層次的學生, 按照模塊化設計且擁有很好的注釋和文檔的SQLite源代碼, 將為他們打下良好的基礎. 這並不是說SQLite就是如何實現其他數據庫引擎的精確模型, 但是很適合學生們了解SQLite是如何快速工作的, 從而掌握其他數據庫系統的設計實現原則.
· 試驗SQL語言的擴展
SQLite簡單且模塊化的設計使得它可以成為一個用來測試數據庫語言特性或新想法的優秀的原型平台
4.1.2 哪些場合適合使用其他的關系型數據庫管理系統(RDBMS)
· 客戶端/服務器程序
如果你有許多的客戶端程序要通過網絡訪問一個共享的數據庫, 你應當考慮用一個客戶端/服務器數據庫來替代SQLite. SQLite可以通過網絡文件系統工作, 但是因為和大多數網絡文件系統都存在延時, 因此執行效率不會很高. 此外大多數網絡文件系統在實現文件邏輯鎖的方面都存在着bug(包括Unix 和windows). 如果文件鎖沒有正常的工作, 就可能出現在同一時間兩個或更多的客戶端程序更改同一個數據庫的同一部分, 從而導致數據庫出錯. 因為這些問題是文件系統執行的時候本質上存在的bug, 因此SQLite沒有辦法避免它們.
好的經驗告訴我們, 應該避免在許多計算機需要通過一個網絡文件系統同時訪問同一個數據庫的情況下使用SQLite.
· 高流量網站
SQLite通常情況下用作一個網站的后台數據庫可以很好的工作. 但是如果你的網站的訪問量大到你開始考慮采取分布式的數據庫部署, 那么你應當毫不猶豫的考慮用一個企業級的客戶端/服務器數據庫來替代SQLite.
· 超大的數據集
當你在SQLite中開始一個事務處理的時候(事務處理會在任何寫操作發生之前產生, 而不是必須要顯示的調用BEGIN...COMMIT), 數據庫引擎將不得不分配一小塊臟頁(文件緩沖頁面)來幫助它自己管理回滾操作. 每1MB的數據庫文件SQLite需要256字節. 對於小型的數據庫這些空間不算什么, 但是當數據庫增長到數十億字節的時候, 緩沖頁面的尺寸就會相當的大了. 如果你需要存儲或修改幾十GB的數據, 你應該考慮用其他的數據庫引擎.
· 高並發訪問
SQLite對於整個數據庫文件進行讀取/寫入鎖定. 這意味着如果任何進程讀取了數據庫中的某一部分, 其他所有進程都不能再對該數據庫的任何部分進行寫入操作. 同樣的, 如果任何一個進程在對數據庫進行寫入操作, 其他所有進程都不能再讀取該數據庫的任何部分. 對於大多數情況這不算是什么問題. 在這些情況下每個程序使用數據庫的時間都很短暫, 並且不會獨占, 這樣鎖定至多會存在十幾毫秒. 但是如果有些程序需要高並發, 那么這些程序就需要尋找其他的解決方案了.
方面 |
具體要求 |
必要條件 |
詳細描述 |
License |
是否收費 |
免費使用 |
|
是否開源 |
開源 |
||
是否有技術支持 |
主要是社區支持,如果需要專業支持需要購買 |
||
商業目的的分發版本是否仍要收費 |
是 |
免費 |
|
其他 |
|||
性能 |
數據容量支持100000條以上記錄 |
是 |
支持 |
並發查詢處理能力 |
SQLite在並發(包括多進程和多線程)讀寫方面的性能一直不太理想。數據庫可能會被寫操作獨占,從而導致其它讀寫操作阻塞或出錯。 |
||
查詢速度 |
是 |
||
修改速度 |
是 |
||
平台支持 |
32/64位 |
全部支持 |
|
Linux/window/UNIX/mobile |
支持Linux/Mac OS/Windows |
||
運行方式支持 |
支持嵌入式 |
支持 |
|
支持獨立運行 |
不支持 |
||
連接方式支持 |
支持ODBC |
默認不支持,必須通過第三方的ODBC驅動 |
|
支持JDBC |
默認不支持,必須通過第三方的JDBC驅動 |
||
支持內存訪問 |
通過c接口(專用API) |
||
支持網絡訪問 |
不支持 |
||
SQL支持 |
支持SQL |
是 |
支持 |
支持Index,Trigger, Constrains,Views |
支持,有資料說其不支持外鍵約束。 |
||
管理界面 |
支持管理界面 |
支持CLI |
|
管理界面友好程度 |
較差 |
4.2 Altibase
Altibase™內存數據庫管理系統(DBMS),內存數據管理系統的最新技術,是一個在事務優先的環境中提供高性能和高可用性的軟件解決方案。Altibase提供極限性能、容錯能力和事務管理的方便性,特別是在通信、網上銀行、證券交易、實時應用和嵌入式系統領域。Altibase能夠最大限度的發揮數據庫服務系統的潛力,使用Altibase能大大增強您公司的數據服務器的處理能力。
Altibase™內存DBMS為需要容錯服務的系統提供實時數據庫復制的功能。采用Altibase數據庫復制的系統可以實現高性能、高可用性、數據庫一致性、負載平衡和系統可伸縮性。如果您希望您的業務能夠實現最大的成功,請在您的事務優先的系統中使用我們的Altibase數據庫復制解決方案。
資料比較少,且需要商業License,沒有詳細去研究
4.3 Oracle 內存數據庫系列 Berkeley DB 和 TimesTen
Oracle是最重要的商業數據庫產品提供商,它也有內存數據庫的產品系列:主要就是Oracle Berkeley DB 和 Times Ten.前者是只支持嵌入式內存數據,后者是獨立的內存優化數據庫。
4.3.1 Oracle Berkeley DB
Oracle Berkeley DB是Oracle 收購了開源數據庫廠商后推出的產品,其前身是Berkeley DB。它有開源版本,但且對於開源軟件免費。商業版本是要付費。
Oracle Berkeley DB 系列的可嵌入開源數據庫為開發人員提供了無需管理的快速、可靠的本地持久性。Oracle Berkeley DB 系列通常部署為“前沿”數據庫,為不需要 SQL 的應用程序用例提供很高的性能、可靠性、可伸縮性以及可用性。
Oracle Berkeley DB 產品系列
— Berkeley DB — 事務處理式存儲引擎,用於基本鍵/值數據結構中的非類型化數據 — 新增!版本 4.7 現已推出
— 針對 Java 環境優化的純 Java 版 Berkeley DB — 新增!版本 3.3
— Berkeley DB XML — 原生 XML 數據庫,可基於 XQuery 訪問容器中存儲的文檔,並根據其內容進行索引 — 新增!版本 2.4 現已推出
4.3.2 Oracle TimesTen
Oracle 內存數據庫 TimesTen 是一個針對內存進行了優化的關系數據庫,它為應用程序提供了當今實時企業和行業(如電信、資本市場和國防)所需的即時響應性和非常高的吞吐量。Oracle 內存數據庫 TimesTen 作為獨立或嵌入式數據庫部署在應用層中,利用標准的 SQL 接口對完全位於物理內存中的數據庫進行操作。它也可以用作 Oracle 數據庫的內存中數據庫緩存,以改進用戶應用程序的響應時間和吞吐量。
4.4 eXtremeDB
eXtremeDB內存式實時數據庫是為實時系統及嵌入式系統而特別設計的數據庫。與同類產品不同,eXtremeDB不是通過 對企業數據庫面向實時嵌入式應用進行剪裁而來;而是總結了30年來McObject公司在編譯器、實時編程、數據管理、內核級驅 動軟件等領域的經驗,面向實時嵌入式應用從頭開發的最新實時數據管理技術。
eXtremeDB滿足了您對實時數據庫的一切期待:高級數據定義語言、並行訪問、基於交易及靈活的索引… …等等。不僅如此,出乎您的意外,eXtremeDB在緊湊的引擎中還提供諸如事件觸發、目標歷史等等功能。
eXtremeDB嵌入式數據庫滿足更多的實時開發的要求。
· 最快的內存數據庫。
· 多種索引支持
· 高可用性-組合選項
· 非常靈活的數據存儲: 內存式,磁盤式或混合式
· 多種應用接口: 兩種 SQL, 兩種更快的原始接口
· 幾乎牢不可破 -
又一個商業內存數據庫產品,這個特點是實時數據庫,號稱最快。
4.5 H2 Database
h2是Thomas Mueller提供的一個開源的、純java實現的關系數據庫,官方網站:http://www.h2database.com/html/main.html。
它的主要特性是:
- 非常速的數據庫引擎
- 開源、免費數據庫
- 支持 JDBC和ODBC API,支持SQL
- 支持嵌入式,服務器和集群模式。支持內存數據庫。
- 提供基於瀏覽器的管理控制台
- 整個應用本身只有1MB左右。
其他特性還包括
- 基於磁盤或內存的數據庫、表,支持只讀數據庫、臨時表。
- 兩段式事務支持
- 支持多個連接。表級別的鎖。
- 基於成本的優化,為復雜查詢使用遺傳算法,零管理。
- 滾動的、可修改的result set支持。支持大結果集、外部結果排序。
- 加密數據庫(AES或XTEA),SHA-256密碼加密。
性能比較(摘自h2database網站)
嵌入模式下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
-
- 嵌入式應用。有一個項目在為.Net使用H2,使用CLI重新編譯H2。還沒有深入關注。
- ODBC。但性能一般。
4.5 其他內存數據庫
包括Derby, HSQLDB等.
-------------------------------------------------------------------------------------------------------------------------------------------------------------------
In-memory database in wikipedia: (http://en.wikipedia.org/wiki/In-memory_database)
Products
Product name![]() |
License![]() |
Description![]() |
---|---|---|
Adaptive Server Enterprise (ASE) 15.5 | Proprietary | enterprise database from Sybase)[4] |
Apache Derby | Apache License 2.0 | Java RDBMS |
Altibase | Proprietary | has in-memory and disk table; HYBRID DBMS |
BlackRay | GNU General Public Licence (GPLv2) and BSD License | |
CSQL | GNU General Public Licence or proprietary | |
Datablitz | Proprietary | DBMS |
Eloquera | Proprietary | In-memory, In-memory:persist modes |
eXtremeDB | commercial product | DBMS, also check out its open source PERST dbms. |
FleetDB | MIT | NOSQL db with Writing to an append-only log to provide durability. |
H2 | Mozilla Public License or Eclipse Public License | has a memory-only mode |
HSQLDB | BSD license | has a memory-only mode |
IBM TM1 | Proprietary | in-memory BI and data analysis |
InfoZoom | Proprietary | in-memory BI and data analysis |
KDB | Proprietary | DBMS, also supports disk based data |
membase | Apache License | NoSQL, hybrid |
MicroStrategy | in-memory BI for MicroStrategy 9 | |
MonetDB | MonetDB License | |
MySQL | GNU General Public License or proprietary | has a cluster server which uses a main-memory storage engine |
Oracle Berkeley DB | Sleepycat License | can be configured to run in memory only |
Panorama | for Windows and Macintosh, both single user and server versions | |
ParAccel | Proprietary | in-memory, columnar, relational, ACID-compliant; disk-based mode as well |
Polyhedra IMDB | Proprietary | relational, supports High-Availability; acquired in 2001 by ENEA |
QlikView | BI-tool developed by QlikTech | |
RDM Embedded | Proprietary | including hybrid |
RDM Server | Proprietary | including hybrid |
Redis | BSD | NoSQL |
solidDB by IBM | including hybrid, HSB-based HA, Shared memory, embedded, XA, etc. | |
SAP HANA database | Proprietary | Database engine of the SAP In-Memory Appliance (SAP HANA) produced by SAP AG |
SQLite | Public domain | hybrid, RAM and disk dbs can be used together |
Starcounter | in-memory object relational dbms | |
TimesTen by Oracle | in memory only or as a cache for Oracle Database | |
Vertipaq | Proprietary | Microsoft PowerPivot and Microsoft Analysis Services in-memory BI engine |
VoltDB | GNU General Public License v3 | in-memory |
TREX | search engine in the SAP NetWeaver integrated technology platform produced bySAP AG | |
Xcelerix byFrontex | commercial product |