JavaMuse

          HSQLDB文檔

          一 什么是HSQLDB
          HSQLDB具有以下特點:
          l ???????? 是一個開放源代碼的JAVA 數據庫
          l ???????? 具有標準的SQL 語法和JAVA 接口
          l ???????? HSQLDB 可以自由使用和分發
          l ???????? 非常簡潔和快速的
          l ???????? 具有內存數據庫,獨立數據庫和C/S 數據庫三種方式
          l ???????? 可是在APPLET 中使用
          更多的細節:
          l ???????? 索引可以被創建和自動使用
          l ???????? 支持事務處理
          l ???????? 允許表關聯
          l ???????? 完整性引用和約束
          l ???????? 支持JAVA存儲過程和函數
          l ???????? 數據庫可以生成SQL腳本
          l ???????? 使用用戶名,密碼,訪問權限等安全機制
          l ???????? 可以被JAVA1.1和JAVA2編譯
          建立在HypersonicSQL基礎上的HSQLDB,是一個通用目的的數據庫,非常的小,而且易于安裝和使用??梢杂糜贏PPLETS中 ,測試中,應用系統中。
          由于提供了標準SQL和JDBC接口,HSQLDB可以方便的和其他數據庫之間進行數據轉換。
          HSQLDB的當前最新版本是1.7.1,以壓縮包的形式提供,包括可以使用的JAR文件,文檔,源代碼,測試程序,例子等。
          操作模式介紹
          HSQLDB有兩種操作模式:
          l ???????? 進程內模式(只用在同一個JVM里的應用程序才可以訪問數據庫)
          l ???????? C/S模式(多個計算機/系統可以訪問同一個數據庫)
          ?
          進程內訪問模式
          進程內訪問模式也就是獨立模式。這里的獨立模式是相對于C/S模式(客戶端程序訪問數據庫服務器)而言的。這里,數據庫和應用程序運行在同一個JVM下。這個時候的數據庫實際上就是相當于被應用程序調用的代碼庫。程序和數據庫通過通用的JDBC調用進行通訊,但是這種調用是內部調用,不需要通過網絡通訊。
          在這個模式下,同一時間一個數據庫只能有一個應用程序訪問,否則,就要使用C/S模式(允許多個JVM或者計算機在同一時間訪問同一個數據庫)。
          ?
          這種模式下的JDBC的URL如下:
          jdbc:hsqldb:test
          這里,test是數據庫文件名。另一個例子(WINDOWS系統下):
          				jdbc:hsqldb:c:\db\test 
          		
          ?
          ?
          C/S 訪問模式
          這種模式下數據庫和應用程序不是運行在同一個JVM進程下,而是有自己獨立的進程或者是獨立的機器。 不需要客戶端程序進入服務器的文件系統。這種模式下的數據庫操作模式和一些大的數據庫(比如SQL SERVER,ORACLE等)沒什么區別的??梢栽贗NTERNET或者INTRANET。
          HSQLDB除了有自己的訪問協議,還支持標準的HTTP協議,從而可以穿越防火墻或者代理服務器來訪問數據庫。
          In all Server modes the actual database file name is specified in the Java command that starts the server. This can be the dot "." for all-in-memory operation or the path for the database name
          ?
          服務器模式一共有三種:SERVER,WEBSERVER和SERVLET。
          ?
          l ???????? SERVER
          這種模式下的通訊協議是建立在TCP/IP基礎上的HSQL專有協議。每個客戶端都有一個獨立的連接。這種模式的響應速度是非??斓模绻褂肅/S模式,應該更多的采用這種服務模式。
          這種模式下的JDBC URL是:
          jdbc:hsqldb:hsql://hsqldbsrv
          這里,hsqldbsrv是機器名稱。如果一臺機器上跑多個服務器,需要指定端口,例如:jdbc:hsqldb:hsql://hsqldbsrv:9002,如果是本地計算機,則使用localhost:jdbc:hsqldb:hsql://localhost。
          ?
          l ???????? WEBSERVER
          有些時候,由于防火墻或者代理服務器的存在,需要使用HTTP協議進行通訊,系統提供一個小而簡單的WEBSERVER用來相應針對數據庫的查詢,例如:
          				jdbc:hsqldb:http://websrv
          		
          ?
          l ???????? SERVLET
          這種模式和WEBSERVER模式很類似,數據庫運行在一個SERVLET里,而SERVLET可以運行在幾乎所有的WEBSERVER里。而且和JAVA SERVLETE API兼容(測試環境是J2DK2.1)。這是通過網絡直接訪問的。如果你的SERVLET不能直接訪問這個數據庫,就不要使用這種模式。
          ?
          全內存訪問(All-In-Memory )模式
          所謂全內存訪問模式,就是所有的數據(包括索引和記錄)都保存在主內存里。這意味著數據庫的大小是受到內存大小的限制的(不能超過內存的大?。?。支持這種模式的原因是:
          l ???????? 在非日志模式下,這種模式稍微快些
          l ???????? 可以在APPLET下使用
          l ???????? 用來存儲臨時數據(應用系統的數據緩存)All-In-Memory
          JDBC URL如下:
          				jdbc:hsqldb:. 
          		
          ?
          內存和硬盤結合訪問模式
          ?
          在這種模式下,數據庫的改變會寫入到硬盤中,這就意味著在數據庫啟動時,內存里的表會根據他們的數據重新創建。或者說,可以創建表來保存數據,在訪問數據庫時,只有少量記錄時保存在內存里的??梢栽趧摻ǖ臅r候使用''''CREATE CACHED TABLE''''來代替''''CREATE TABLE''''。從而支持大表(這些表的記錄相對于內存來說太大了)。被緩存的表的索引也可以保存到硬盤中。因此,數據庫的大小就可以不受到內存大小的限制。進入緩存表要比從內存表里獲取數據要慢些。從1.7.0版本開始,支持第三種模式:數據可以存儲在文本文件(如CSV格式的文件)中。對應的語句時:''''CREATE TEXT TABLE''''。
          在關閉數據庫前,當前狀態會被保存到磁盤中。緩存表中的數據會被保存到一個單獨的文件中。啟動HSQLDB時,數據庫從磁盤中載入數據(SQL腳本被執行),如果數據庫被毀壞(比如使用Ctrl+C或者斷電),數據也不會丟失。這是因為當下次數據庫重新啟動時,它使用腳本恢復到最近一次(有腳本文件的那次)的狀態。
          ?
          ?
          混合綁定模式
          所有的模式都可以在一個程序里使用,系統可以在統一時間使用這四種模式,去連接四種不同的數據庫,例如:
          				c1=DriverManager.getConnection("jdbc:hsqldb:.","sa",""); 
          		
          				c2=DriverManager.getConnection("jdbc:hsqldb:test","sa","");
          		
          				c3=DriverManager.getConnection("jdbc:hsqldb:http://dbserver","sa",""); 
          		
          				c4=DriverManager.getConnection("jdbc:hsqldb:hsql://dbserver","sa","");
          		
          在這個例子中,四個連接被打開:
          c1是內存數據庫;c2打開的是本地數據庫test;c3使用http協議連接dbserver數據庫;c4也是連接dbserver機器,但是使用的是更快的hsql協議。這里的限制就是:只有一個進程內的全內存進程是可用的。
          ?
          比較
          每種模式或配置都有不同的細節和好壞兩個方面:
          l ???????? 事務處理
          對于webserver和servlet模式而言,由于HTTP協議是無狀態的,因此,每個查詢數據庫都建立新的連接。每次查詢都需要發送用戶名和密碼到數據庫中,然后建立一個新的連接,同時也建立一個新的事務(因為事務是綁定到連接中的)??梢允褂谩痗ookies’,但是現在還沒有實現。
          l ???????? 并發訪問
          SERVER模式允許系統和管理工具(比如DatabaseManager同時訪問數據庫)。
          l ???????? 數據庫性能優化因素
          內存數據庫不需要訪問系統,因此是最快的。其他模式的數據庫需要訪問文件系統,每個INSERT/UPDATE/DELETE操作都要保存到磁盤中,因此速度慢些。如果select和delete查詢命中了緩存表的信息,則速度幾乎和內存表速度一樣快,否則就要慢許多(因為要和操作系統的文件系統交互)。
          l ???????? 每個statement的傳輸時間
          在SERVER模式,每個statement都需要通過TCP/IP協議傳送到服務端,然后將結果返回到客戶端。而webserver和servlet模式則需要更多的時間,因為每次statement都需要重新建立連接。相對照的,進程內模式則是在一個系統內部傳送數據,就快多了。
          ?
          l ???????? 以APPLET方式運行
          這就是全內存操作。

          posted on 2007-03-13 14:01 滿山紅葉 閱讀(356) 評論(0)  編輯  收藏


          只有注冊用戶登錄后才能發表評論。


          網站導航:
           
          主站蜘蛛池模板: 城固县| 齐河县| 吴忠市| 筠连县| 蓝田县| 郑州市| 久治县| 体育| 栖霞市| 囊谦县| 通辽市| 双辽市| 中阳县| 广昌县| 余庆县| 米脂县| 鞍山市| 明光市| 黄浦区| 鄂托克旗| 台南县| 东丰县| 日土县| 中方县| 达拉特旗| 普定县| 英吉沙县| 仁寿县| 运城市| 西昌市| 白山市| 永城市| 班戈县| 哈尔滨市| 县级市| 买车| 怀远县| 通城县| 铜梁县| 济源市| 大邑县|