H2是一個開源的內存數據庫。Java編寫、快速、小巧(1.5MB jar包)還提供了Web控制台管理數據庫內容。
主要功能
- 非常快速的數據庫引擎。
- 開源。
- Java編寫。
- 支持標准SQL、JDBC API。
- 支持嵌入式模式、服務器模式和集群。
- 強大的安全功能。
- 支持PostgreSQL的ODBC驅動。
- 多版本並發。
附加功能
- 支持基於硬盤或內存數據庫和表、只讀數據庫、臨時表。
- 支持事務(read committed),兩步提交機制(2-phase-commit)。
- 多個連接,表級鎖。
- 基於成本的優化、復雜查詢采用遺傳算法、零管理。
- 支持可滾動和可更新的結果集、大結果集、外部結果排序、函數可以返回結果集。
- 加密的數據庫(AES)、SHA-256加密的密碼、加密功能、SSL。
SQL支持
- 支持多schema、information schema(Support for multiple schemas, information schema)。
- 參照完整性/使用級聯外鍵約束、check約束。
- 內連接和外鏈接、子查詢、只讀視圖和內嵌視圖。
- 觸發器及Java函數/存儲過程。
- 很多內置功能,包括XML和無損壓縮。
- 廣泛的數據類型,包括大對象(BLOB/CLOB)和數組。
- 隊列和自增長的列、計算列(可用於基於索引的功能)。
- 支持ORDER BY、GROUP BY、HAVING、UNION、LIMIT、TOP。
- 支持排序規則,包括ICU4J庫。
- 支持用戶和角色。
- 兼容模式支持IBM DB2、Apache Derby、HSQLDB、MS SQL Server、MySQL、Oracle、和PostgreSQL等。
安全功能
- 包括對SQL注入問題的解決方案。
- 使用SHA-256和鹽(SHA-256 and salt)認證用戶密碼。
- 對於服務器模式的連接,用戶密碼從不會以純文本格式通過網絡傳輸。
- 所有數據庫文件(包括用於備份數據的腳本文件)可使用AES-128算法加密。
- 遠程JDBC驅動支持通過TLS的TCP/IP連接。
- 內置的web服務器支持通過TLS連接。
- 密碼使用char數組發送到數據庫,而不是String。
其它功能和工具
- 體積小巧(小於1.5MB),低內存需求。
- 多種索引類型(b-tree、tree、hash)。
- 支持多維索引。
- 支持CSV文件。
- 支持鏈表,及一個內置的虛擬“range”表。
- 支持EXPLAIN PLAN聲明;復雜的跟蹤選項。
- 數據庫關閉可以延遲或者禁用以提高性能。
- 自帶基於web的控制台應用(已譯成多國語言)。
- 數據庫可以生成SQL腳本文件。
- 包含一個恢復工具,可以轉儲數據庫內容。
- 支持變量(例如計算運行總和)。
- 自動重新編譯預處理語句。
- 使用少量數據庫文件。
- 為每一條記錄和日志條目使用校驗和以保證數據完整性。
- 經過充分測試(高覆蓋率、隨機壓力測試)。
連接模式簡介
支持以下三種模式:
- 嵌入式模式(使用JDBC的本地連接)。
- 服務器模式(使用JDBC或ODBC的通過TCP/IP的遠程連接)。
- 混合模式(本地和遠程連接同時存在)。
嵌入式模式
在嵌入式模式下,應用程序使用和JDBC相同的JVM打開數據庫。這是最快、最簡單的連接方式。缺點是數據庫任何時候只在一個虛擬機中打開。同時支持持久化和在內存中存儲數據。沒有同時打開數據庫的數量限制,沒有連接數限制。
服務器模式
當使用服務器模式時(也稱作遠程模式或者客戶端/服務端模式),應用程序使用 JDBC或ODBC API以遠程方式打開數據庫。數據庫服務器需要在相同或者另外的虛擬機,或者干脆另外一台計算機啟動。 很多應用程序可以同時通過連接到這台服務器連接同一個數據庫。在內部,該服務器進程以嵌入式模式打開多個數據庫。 由於所有數據通過TCP/IP傳輸,服務器模式要比嵌入式模式慢一些。同時支持持久化和在內存中存儲數據。每台服務器沒有同時打開數據庫的數量限制,沒有 連接數限制。
混合模式
混合模式是嵌入式模式和服務器模式的組合。第一個應用程序在嵌入式模式中連接到數據 庫,但也啟動了一個數據庫服務器,這樣其他應用程序(運行在不同進程或虛擬機中)可以同時訪問數據。本地連接像嵌入式模式一樣快速,遠程連接稍慢。 數據庫服務器可以通過API,或者自動化(自動混合模式)啟停。當使用自動混合模式時,所有要連接數據庫的客戶端可使用完全相同的URL。
開發資源
官方網站:http://www.h2database.com/
開源地址:https://github.com/h2database/h2database
from:http://hao.jobbole.com/h2-2/