資料介紹
嵌入式數(shù)據(jù)庫(kù)無(wú)需安裝,體積小巧,速度又很快,在很多場(chǎng)合可以替代目前流行的MySQL, SQLServer等大中型數(shù)據(jù)庫(kù)。本文介紹兩種嵌入式數(shù)據(jù)庫(kù)產(chǎn)品:Berkeley DB和SQLite,并著重討論它們與Java之間的接口。
通常我們采用各種數(shù)據(jù)庫(kù)產(chǎn)品來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)的存儲(chǔ)、檢索等功能,例如,Oracle,SQL Server,MySQL等等。這些產(chǎn)品除提供基本的查詢,刪除,添加等功能外,也提供了很多高級(jí)特性,如觸發(fā)器,存儲(chǔ)過(guò)程,數(shù)據(jù)備份恢復(fù),全文檢索功能等。但實(shí)際上,很多的應(yīng)用,僅僅利用到了這些數(shù)據(jù)庫(kù)產(chǎn)品的基本特性而已。而且在一些小型應(yīng)用上,或者某些特殊場(chǎng)合的應(yīng)用,比如桌面程序,這些數(shù)據(jù)庫(kù)產(chǎn)品就明顯有一些臃腫。在這些情況下,嵌入式數(shù)據(jù)庫(kù)的優(yōu)勢(shì)就特別明顯了。
嵌入式數(shù)據(jù)庫(kù)無(wú)須獨(dú)立運(yùn)行的數(shù)據(jù)庫(kù)引擎,它是由程序直接調(diào)用相應(yīng)的API去實(shí)現(xiàn)對(duì)數(shù)據(jù)的存取操作。更直白的講,嵌入式數(shù)據(jù)庫(kù)是一種具備了基本數(shù)據(jù)庫(kù)特性的數(shù)據(jù)文件。嵌入式數(shù)據(jù)庫(kù)與其它數(shù)據(jù)庫(kù)產(chǎn)品的區(qū)別是,前者是程序驅(qū)動(dòng)式, 而后者是引擎響應(yīng)式。嵌入式數(shù)據(jù)庫(kù)的一個(gè)很重要的特點(diǎn)是它們的體積非常小,編譯后的產(chǎn)品也不過(guò)幾十K。這不但對(duì)桌面程序的數(shù)據(jù)存儲(chǔ)方案是一個(gè)很好的選擇,也使得它們可以應(yīng)用到一些移動(dòng)設(shè)備上。同時(shí),很多嵌入式數(shù)據(jù)庫(kù)在性能上也優(yōu)于其它數(shù)據(jù)庫(kù),所以在高性能的應(yīng)用上也常見(jiàn)嵌入式數(shù)據(jù)庫(kù)的身影。
下面介紹的是兩個(gè)開(kāi)放源代碼的嵌入式數(shù)據(jù)庫(kù),Berkeley DB和SQLite。同時(shí)側(cè)重介紹如何應(yīng)用Java連接這兩種嵌入式數(shù)據(jù)庫(kù)。
一。 Berkeley DB
1. 簡(jiǎn)介
Berkeley DB是一款健壯的,高速的工業(yè)級(jí)嵌入式數(shù)據(jù)庫(kù)產(chǎn)品,你可以在它的官方主頁(yè)(見(jiàn)參考鏈接一)上發(fā)現(xiàn)很多知名的公司都采用了這款嵌入式數(shù)據(jù)庫(kù)。Berkeley DB的一個(gè)很重要的特點(diǎn)是就是高速存儲(chǔ)。在高流量,高并發(fā)的情況下,Berkeley DB要比非嵌入式的數(shù)據(jù)庫(kù)表現(xiàn)得更加出色。所以在一些技術(shù)實(shí)現(xiàn)上,Berkeley DB被作為大型關(guān)系數(shù)據(jù)庫(kù)的中間數(shù)據(jù)緩沖層,用來(lái)快速的保存數(shù)據(jù),可能會(huì)在適當(dāng)?shù)臅r(shí)刻再導(dǎo)入到大型數(shù)據(jù)庫(kù)中,進(jìn)而應(yīng)用大型數(shù)據(jù)庫(kù)所提供的更為高級(jí)的特性。
Berkeley DB雖然是開(kāi)源的產(chǎn)品,但對(duì)某些條件下的商業(yè)性應(yīng)用,卻不是免費(fèi)的,而且價(jià)格頗為昂貴。這些商業(yè)條件排除了開(kāi)源的情況,不發(fā)放分布版本的情況,等等。比如,如果你的程序是開(kāi)放源代碼的或者僅僅應(yīng)用到單一的網(wǎng)站上,在這種情況下,Berkeley DB是免費(fèi)的。
2. 獲得Java與Berkeley DB的接口
Berkeley DB目前的版本是4.1.25,自帶了Java接口。下載的壓縮包中包含C和Java語(yǔ)言的源代碼和編譯配置文件。在Windows平臺(tái),可以用MS Visual C++ 6.0或MS VC.Net編譯。用VC6編譯的操作如下介紹:在源代碼的build_win32路徑下打開(kāi)VC的工程文件,之后在Build菜單中的Set Active Configuration選擇db_java win32 release編譯選項(xiàng)。在VC的Tools菜單Options選項(xiàng)中指定JNI.H等Java本地化接口編譯時(shí)所需要頭文件的位置。你會(huì)在JDK的include路徑下找到這些頭文件, 例如加入的路徑可能會(huì)是這樣的:C:jdk1.4include和C:jdk1.4includewin32。最后在Tools菜單中Options選項(xiàng)還要設(shè)置Javac.exe和Jar.exe的執(zhí)行路徑,這個(gè)設(shè)置會(huì)使VC開(kāi)發(fā)環(huán)境也能調(diào)用Java編譯器,從而在VC環(huán)境下直接完成對(duì)Java接口類的編譯和打包。在編譯后,在release 路徑下的文件中找到db.jar, libdb41.dll, libdb_java41.dll,這三個(gè)文件組成了Berkeley DB 的Java接口程序包。
3. 應(yīng)用Java與Berkeley DB的接口
Berkeley DB并不是一個(gè)關(guān)系型的數(shù)據(jù)庫(kù)。不能應(yīng)用標(biāo)準(zhǔn)的SQL語(yǔ)句對(duì)數(shù)據(jù)庫(kù)操作,對(duì)它的操作要調(diào)用專用的API實(shí)現(xiàn)。這些API提供了查詢、插入、刪除等功能。比如com.sleepycat.db.Db類代表數(shù)據(jù)庫(kù)對(duì)象。Db類的put()方法完成的是插入功能,get()方法完成的是讀出數(shù)據(jù)的功能。
Berkeley DB每一個(gè)記錄都有一個(gè)鍵值和對(duì)應(yīng)的數(shù)據(jù)值,而鍵值和數(shù)據(jù)必須是類com.sleepycat.db.Dbt的對(duì)象或其子類的對(duì)象。Dbt提供了一些方法可以將byte數(shù)組或Object對(duì)象保存到Dbt的對(duì)象中去。比如,Dbt類中的set_data(byte[])或set_object(Object)方法。注意到目前Berkeley DB中的Java API命名方法并不符合Java的命名規(guī)范,比如set_data()方法應(yīng)該命名為setData()方法。Berkeley DB許諾在下一個(gè)版本中會(huì)提供符合命名規(guī)范的Java API。
Berkeley DB對(duì)任何存入的數(shù)據(jù)都是直接原樣存儲(chǔ)到數(shù)據(jù)文件中去,無(wú)論其是二進(jìn)制數(shù)據(jù)還是ASCII或Unicode等編碼的文本。通常可以利用這一特性和Java串行化的概念方便的進(jìn)行數(shù)據(jù)的存取。例如聲明一個(gè)類
public class AccountInfo implements Serializable{
//帳戶信息
public String loginName;
public String password;
public boolean auotLogin;
}
在這個(gè)AccountInfo類中僅僅包含了數(shù)據(jù)項(xiàng)的定義。我們完全可以將這個(gè)類看作數(shù)據(jù)庫(kù)的表中字段定義。可以用Berkeley DB保存AccountInfo對(duì)象的串行化二進(jìn)制數(shù)據(jù),以此來(lái)保存這個(gè)對(duì)象中的變量值。在操作中,先對(duì)Dbt的對(duì)象調(diào)用set_object(AccountInfo)方法,而后把這個(gè)Dbt對(duì)象作為一條紀(jì)錄保存到表中。當(dāng)然,我們也可以應(yīng)用繼承Dbt類的方法來(lái)完成對(duì)數(shù)據(jù)的保存。
下面這段簡(jiǎn)單代碼演示如何將數(shù)據(jù)存入到數(shù)據(jù)庫(kù)中,然后再用游標(biāo)對(duì)象瀏覽全部數(shù)據(jù)。
//注意,下面的程序的忽略了對(duì)異常處理,寫(xiě)入數(shù)據(jù)初始化等等一些代碼,請(qǐng)?jiān)谶m當(dāng)修改后再編
//譯運(yùn)行它
Db dbFile = null;
//生成Db對(duì)象
dbFile = new Db(null, 0);
//用BTree方式打開(kāi)數(shù)據(jù)庫(kù),庫(kù)文件是在c:/temp下的mydata.db文件,表名是employee
//如果數(shù)據(jù)庫(kù)不存在,則自動(dòng)生成一個(gè)新的數(shù)據(jù)庫(kù)。
dbFile.open(null,“c:\temp\mydata.db”,“employee”,Db.DB_BTREE,
Db.DB_CREATE,0);
Dbt key = new Dbt();
Dbt data = new Dbt();
//向庫(kù)文件中插入一條數(shù)據(jù),如果已經(jīng)存在,打印出錯(cuò)信息
if (dbFile.put(null,key, data, Db.DB_APPEND) == Db.DB_KEYEXIST) {
System.out.println(“Key already exists.”);
}
//關(guān)閉數(shù)據(jù)文件
dbFile.close(0);
//重新打開(kāi)數(shù)據(jù)文件
dbFile = new Db(null, 0);
dbFile.open(null, “c:\temp\mydata.db”, “employee”, Db.DB_UNKNOWN, 0, 0644);
// 聲明一個(gè)數(shù)據(jù)庫(kù)游標(biāo)Dbc對(duì)象iterator
Dbc iterator = dbFile.cursor(null, 0);
// 遍歷整個(gè)表
Dbt key = new Dbt();
while (iterator.get(key, data, Db.DB_NEXT) == 0)
{
System.out.println(“reading”);
}
//關(guān)閉游標(biāo)和數(shù)據(jù)文件
iterator.close();
dbFile.close(0);
在運(yùn)行Berkeley DB的程序時(shí)勿必在系統(tǒng)環(huán)境變量PATH中設(shè)置libdb41.dll和 libdb_java41.dll所在的路徑。
4. Berkeley DB的存儲(chǔ)模式
Berkeley DB提供了四種存儲(chǔ)數(shù)據(jù)的模式:Btree,Hash,Queue和Recno。在打開(kāi)數(shù)據(jù)庫(kù)的時(shí)候要指定一種存儲(chǔ)模式,比如上例中open()方法中的參數(shù)Db.DB_BTREE就是指定以Btree模式打開(kāi)數(shù)據(jù)庫(kù)。
Btree模式是以排序的二叉樹(shù)的方式存儲(chǔ),Hash是以線性哈希表的方式存儲(chǔ)。Queue用邏輯記錄號(hào)做為鍵值,以定長(zhǎng)的數(shù)據(jù)為記錄值。Recno方式也以邏輯記錄號(hào)做為鍵值,但可以保存定長(zhǎng)或變長(zhǎng)的記錄值。這里提到的邏輯記錄號(hào)有兩種,可變的和固定的??勺冞壿嬘涗浱?hào)會(huì)根據(jù)數(shù)據(jù)記錄的增加與刪除做相應(yīng)的變化。比如在數(shù)據(jù)庫(kù)中共有100條記錄,如果刪除第80條記錄,那么第81條記錄的邏輯記錄號(hào)會(huì)自動(dòng)變成80,以此類推,第100條記錄邏輯記錄號(hào)會(huì)變成99。固定的邏輯記錄號(hào)則無(wú)論數(shù)據(jù)庫(kù)如何操作都不會(huì)有變化。Queue模式下,邏輯記錄號(hào)只能是固定方式。
Recno模式則可通過(guò)配置來(lái)選擇是采用那種類型的記錄號(hào)作為鍵值。Btree模式也可以通過(guò)設(shè)置,將可變的邏輯記錄號(hào)做為鍵值。
這幾種存儲(chǔ)模式各有優(yōu)缺點(diǎn),要根據(jù)具體的需求來(lái)選擇。當(dāng)鍵值不想用邏輯記錄號(hào)時(shí)Btree或Hash是必須的選擇。Btree方式比較適合連續(xù)的順序讀取,比如,當(dāng)鍵值是時(shí)間值,如果經(jīng)常有從某一時(shí)間點(diǎn)開(kāi)始連續(xù)讀取后繼的記錄的操作,Btree是一種很好的選擇。對(duì)隨機(jī)的跳躍式讀取,Hash模式則更為恰當(dāng)。Queue和Recno都以記錄號(hào)為鍵值,但前者適合先進(jìn)先出的讀取方式。
Recno則通常是存取變長(zhǎng)文本記錄的理想存儲(chǔ)模式。
5. Berkeley DB Environment的概念
Berkeley DB Environment為一組數(shù)據(jù)庫(kù)同時(shí)提供參數(shù)設(shè)置。更為重要的是,如果要應(yīng)用更高級(jí)的特性,必須要使用Environment功能,比如在想要對(duì)保存的數(shù)據(jù)進(jìn)行加密存儲(chǔ)時(shí)。
6. 更多特點(diǎn)
除了最基本的插入、查詢、刪除功能以外,Berkeley DB還提供了一些特性,比如Transaction,數(shù)據(jù)加密,同步加鎖控制,錯(cuò)誤日志等功能。下面的圖片是Berkeley DB功能示意圖。
通常我們采用各種數(shù)據(jù)庫(kù)產(chǎn)品來(lái)實(shí)現(xiàn)對(duì)數(shù)據(jù)的存儲(chǔ)、檢索等功能,例如,Oracle,SQL Server,MySQL等等。這些產(chǎn)品除提供基本的查詢,刪除,添加等功能外,也提供了很多高級(jí)特性,如觸發(fā)器,存儲(chǔ)過(guò)程,數(shù)據(jù)備份恢復(fù),全文檢索功能等。但實(shí)際上,很多的應(yīng)用,僅僅利用到了這些數(shù)據(jù)庫(kù)產(chǎn)品的基本特性而已。而且在一些小型應(yīng)用上,或者某些特殊場(chǎng)合的應(yīng)用,比如桌面程序,這些數(shù)據(jù)庫(kù)產(chǎn)品就明顯有一些臃腫。在這些情況下,嵌入式數(shù)據(jù)庫(kù)的優(yōu)勢(shì)就特別明顯了。
嵌入式數(shù)據(jù)庫(kù)無(wú)須獨(dú)立運(yùn)行的數(shù)據(jù)庫(kù)引擎,它是由程序直接調(diào)用相應(yīng)的API去實(shí)現(xiàn)對(duì)數(shù)據(jù)的存取操作。更直白的講,嵌入式數(shù)據(jù)庫(kù)是一種具備了基本數(shù)據(jù)庫(kù)特性的數(shù)據(jù)文件。嵌入式數(shù)據(jù)庫(kù)與其它數(shù)據(jù)庫(kù)產(chǎn)品的區(qū)別是,前者是程序驅(qū)動(dòng)式, 而后者是引擎響應(yīng)式。嵌入式數(shù)據(jù)庫(kù)的一個(gè)很重要的特點(diǎn)是它們的體積非常小,編譯后的產(chǎn)品也不過(guò)幾十K。這不但對(duì)桌面程序的數(shù)據(jù)存儲(chǔ)方案是一個(gè)很好的選擇,也使得它們可以應(yīng)用到一些移動(dòng)設(shè)備上。同時(shí),很多嵌入式數(shù)據(jù)庫(kù)在性能上也優(yōu)于其它數(shù)據(jù)庫(kù),所以在高性能的應(yīng)用上也常見(jiàn)嵌入式數(shù)據(jù)庫(kù)的身影。
下面介紹的是兩個(gè)開(kāi)放源代碼的嵌入式數(shù)據(jù)庫(kù),Berkeley DB和SQLite。同時(shí)側(cè)重介紹如何應(yīng)用Java連接這兩種嵌入式數(shù)據(jù)庫(kù)。
一。 Berkeley DB
1. 簡(jiǎn)介
Berkeley DB是一款健壯的,高速的工業(yè)級(jí)嵌入式數(shù)據(jù)庫(kù)產(chǎn)品,你可以在它的官方主頁(yè)(見(jiàn)參考鏈接一)上發(fā)現(xiàn)很多知名的公司都采用了這款嵌入式數(shù)據(jù)庫(kù)。Berkeley DB的一個(gè)很重要的特點(diǎn)是就是高速存儲(chǔ)。在高流量,高并發(fā)的情況下,Berkeley DB要比非嵌入式的數(shù)據(jù)庫(kù)表現(xiàn)得更加出色。所以在一些技術(shù)實(shí)現(xiàn)上,Berkeley DB被作為大型關(guān)系數(shù)據(jù)庫(kù)的中間數(shù)據(jù)緩沖層,用來(lái)快速的保存數(shù)據(jù),可能會(huì)在適當(dāng)?shù)臅r(shí)刻再導(dǎo)入到大型數(shù)據(jù)庫(kù)中,進(jìn)而應(yīng)用大型數(shù)據(jù)庫(kù)所提供的更為高級(jí)的特性。
Berkeley DB雖然是開(kāi)源的產(chǎn)品,但對(duì)某些條件下的商業(yè)性應(yīng)用,卻不是免費(fèi)的,而且價(jià)格頗為昂貴。這些商業(yè)條件排除了開(kāi)源的情況,不發(fā)放分布版本的情況,等等。比如,如果你的程序是開(kāi)放源代碼的或者僅僅應(yīng)用到單一的網(wǎng)站上,在這種情況下,Berkeley DB是免費(fèi)的。
2. 獲得Java與Berkeley DB的接口
Berkeley DB目前的版本是4.1.25,自帶了Java接口。下載的壓縮包中包含C和Java語(yǔ)言的源代碼和編譯配置文件。在Windows平臺(tái),可以用MS Visual C++ 6.0或MS VC.Net編譯。用VC6編譯的操作如下介紹:在源代碼的build_win32路徑下打開(kāi)VC的工程文件,之后在Build菜單中的Set Active Configuration選擇db_java win32 release編譯選項(xiàng)。在VC的Tools菜單Options選項(xiàng)中指定JNI.H等Java本地化接口編譯時(shí)所需要頭文件的位置。你會(huì)在JDK的include路徑下找到這些頭文件, 例如加入的路徑可能會(huì)是這樣的:C:jdk1.4include和C:jdk1.4includewin32。最后在Tools菜單中Options選項(xiàng)還要設(shè)置Javac.exe和Jar.exe的執(zhí)行路徑,這個(gè)設(shè)置會(huì)使VC開(kāi)發(fā)環(huán)境也能調(diào)用Java編譯器,從而在VC環(huán)境下直接完成對(duì)Java接口類的編譯和打包。在編譯后,在release 路徑下的文件中找到db.jar, libdb41.dll, libdb_java41.dll,這三個(gè)文件組成了Berkeley DB 的Java接口程序包。
3. 應(yīng)用Java與Berkeley DB的接口
Berkeley DB并不是一個(gè)關(guān)系型的數(shù)據(jù)庫(kù)。不能應(yīng)用標(biāo)準(zhǔn)的SQL語(yǔ)句對(duì)數(shù)據(jù)庫(kù)操作,對(duì)它的操作要調(diào)用專用的API實(shí)現(xiàn)。這些API提供了查詢、插入、刪除等功能。比如com.sleepycat.db.Db類代表數(shù)據(jù)庫(kù)對(duì)象。Db類的put()方法完成的是插入功能,get()方法完成的是讀出數(shù)據(jù)的功能。
Berkeley DB每一個(gè)記錄都有一個(gè)鍵值和對(duì)應(yīng)的數(shù)據(jù)值,而鍵值和數(shù)據(jù)必須是類com.sleepycat.db.Dbt的對(duì)象或其子類的對(duì)象。Dbt提供了一些方法可以將byte數(shù)組或Object對(duì)象保存到Dbt的對(duì)象中去。比如,Dbt類中的set_data(byte[])或set_object(Object)方法。注意到目前Berkeley DB中的Java API命名方法并不符合Java的命名規(guī)范,比如set_data()方法應(yīng)該命名為setData()方法。Berkeley DB許諾在下一個(gè)版本中會(huì)提供符合命名規(guī)范的Java API。
Berkeley DB對(duì)任何存入的數(shù)據(jù)都是直接原樣存儲(chǔ)到數(shù)據(jù)文件中去,無(wú)論其是二進(jìn)制數(shù)據(jù)還是ASCII或Unicode等編碼的文本。通常可以利用這一特性和Java串行化的概念方便的進(jìn)行數(shù)據(jù)的存取。例如聲明一個(gè)類
public class AccountInfo implements Serializable{
//帳戶信息
public String loginName;
public String password;
public boolean auotLogin;
}
在這個(gè)AccountInfo類中僅僅包含了數(shù)據(jù)項(xiàng)的定義。我們完全可以將這個(gè)類看作數(shù)據(jù)庫(kù)的表中字段定義。可以用Berkeley DB保存AccountInfo對(duì)象的串行化二進(jìn)制數(shù)據(jù),以此來(lái)保存這個(gè)對(duì)象中的變量值。在操作中,先對(duì)Dbt的對(duì)象調(diào)用set_object(AccountInfo)方法,而后把這個(gè)Dbt對(duì)象作為一條紀(jì)錄保存到表中。當(dāng)然,我們也可以應(yīng)用繼承Dbt類的方法來(lái)完成對(duì)數(shù)據(jù)的保存。
下面這段簡(jiǎn)單代碼演示如何將數(shù)據(jù)存入到數(shù)據(jù)庫(kù)中,然后再用游標(biāo)對(duì)象瀏覽全部數(shù)據(jù)。
//注意,下面的程序的忽略了對(duì)異常處理,寫(xiě)入數(shù)據(jù)初始化等等一些代碼,請(qǐng)?jiān)谶m當(dāng)修改后再編
//譯運(yùn)行它
Db dbFile = null;
//生成Db對(duì)象
dbFile = new Db(null, 0);
//用BTree方式打開(kāi)數(shù)據(jù)庫(kù),庫(kù)文件是在c:/temp下的mydata.db文件,表名是employee
//如果數(shù)據(jù)庫(kù)不存在,則自動(dòng)生成一個(gè)新的數(shù)據(jù)庫(kù)。
dbFile.open(null,“c:\temp\mydata.db”,“employee”,Db.DB_BTREE,
Db.DB_CREATE,0);
Dbt key = new Dbt();
Dbt data = new Dbt();
//向庫(kù)文件中插入一條數(shù)據(jù),如果已經(jīng)存在,打印出錯(cuò)信息
if (dbFile.put(null,key, data, Db.DB_APPEND) == Db.DB_KEYEXIST) {
System.out.println(“Key already exists.”);
}
//關(guān)閉數(shù)據(jù)文件
dbFile.close(0);
//重新打開(kāi)數(shù)據(jù)文件
dbFile = new Db(null, 0);
dbFile.open(null, “c:\temp\mydata.db”, “employee”, Db.DB_UNKNOWN, 0, 0644);
// 聲明一個(gè)數(shù)據(jù)庫(kù)游標(biāo)Dbc對(duì)象iterator
Dbc iterator = dbFile.cursor(null, 0);
// 遍歷整個(gè)表
Dbt key = new Dbt();
while (iterator.get(key, data, Db.DB_NEXT) == 0)
{
System.out.println(“reading”);
}
//關(guān)閉游標(biāo)和數(shù)據(jù)文件
iterator.close();
dbFile.close(0);
在運(yùn)行Berkeley DB的程序時(shí)勿必在系統(tǒng)環(huán)境變量PATH中設(shè)置libdb41.dll和 libdb_java41.dll所在的路徑。
4. Berkeley DB的存儲(chǔ)模式
Berkeley DB提供了四種存儲(chǔ)數(shù)據(jù)的模式:Btree,Hash,Queue和Recno。在打開(kāi)數(shù)據(jù)庫(kù)的時(shí)候要指定一種存儲(chǔ)模式,比如上例中open()方法中的參數(shù)Db.DB_BTREE就是指定以Btree模式打開(kāi)數(shù)據(jù)庫(kù)。
Btree模式是以排序的二叉樹(shù)的方式存儲(chǔ),Hash是以線性哈希表的方式存儲(chǔ)。Queue用邏輯記錄號(hào)做為鍵值,以定長(zhǎng)的數(shù)據(jù)為記錄值。Recno方式也以邏輯記錄號(hào)做為鍵值,但可以保存定長(zhǎng)或變長(zhǎng)的記錄值。這里提到的邏輯記錄號(hào)有兩種,可變的和固定的??勺冞壿嬘涗浱?hào)會(huì)根據(jù)數(shù)據(jù)記錄的增加與刪除做相應(yīng)的變化。比如在數(shù)據(jù)庫(kù)中共有100條記錄,如果刪除第80條記錄,那么第81條記錄的邏輯記錄號(hào)會(huì)自動(dòng)變成80,以此類推,第100條記錄邏輯記錄號(hào)會(huì)變成99。固定的邏輯記錄號(hào)則無(wú)論數(shù)據(jù)庫(kù)如何操作都不會(huì)有變化。Queue模式下,邏輯記錄號(hào)只能是固定方式。
Recno模式則可通過(guò)配置來(lái)選擇是采用那種類型的記錄號(hào)作為鍵值。Btree模式也可以通過(guò)設(shè)置,將可變的邏輯記錄號(hào)做為鍵值。
這幾種存儲(chǔ)模式各有優(yōu)缺點(diǎn),要根據(jù)具體的需求來(lái)選擇。當(dāng)鍵值不想用邏輯記錄號(hào)時(shí)Btree或Hash是必須的選擇。Btree方式比較適合連續(xù)的順序讀取,比如,當(dāng)鍵值是時(shí)間值,如果經(jīng)常有從某一時(shí)間點(diǎn)開(kāi)始連續(xù)讀取后繼的記錄的操作,Btree是一種很好的選擇。對(duì)隨機(jī)的跳躍式讀取,Hash模式則更為恰當(dāng)。Queue和Recno都以記錄號(hào)為鍵值,但前者適合先進(jìn)先出的讀取方式。
Recno則通常是存取變長(zhǎng)文本記錄的理想存儲(chǔ)模式。
5. Berkeley DB Environment的概念
Berkeley DB Environment為一組數(shù)據(jù)庫(kù)同時(shí)提供參數(shù)設(shè)置。更為重要的是,如果要應(yīng)用更高級(jí)的特性,必須要使用Environment功能,比如在想要對(duì)保存的數(shù)據(jù)進(jìn)行加密存儲(chǔ)時(shí)。
6. 更多特點(diǎn)
除了最基本的插入、查詢、刪除功能以外,Berkeley DB還提供了一些特性,比如Transaction,數(shù)據(jù)加密,同步加鎖控制,錯(cuò)誤日志等功能。下面的圖片是Berkeley DB功能示意圖。
下載該資料的人也在下載
下載該資料的人還在閱讀
更多 >
- 【嵌入式實(shí)驗(yàn)】《嵌入式數(shù)據(jù)庫(kù) sqlite 移植及使用》
- Spring嵌入式數(shù)據(jù)庫(kù)示例
- H2:一款基于 Java 的嵌入式關(guān)系型數(shù)據(jù)庫(kù)
- 嵌入式數(shù)據(jù)庫(kù)
- SQLite嵌入式數(shù)據(jù)庫(kù)在Wince中的應(yīng)用實(shí)例 0次下載
- 嵌入式數(shù)據(jù)庫(kù)系統(tǒng)在ACR中的應(yīng)用研究
- 嵌入式移動(dòng)數(shù)據(jù)庫(kù)NimbleDB的實(shí)現(xiàn)
- 嵌入式移動(dòng)數(shù)據(jù)庫(kù)的數(shù)據(jù)同步及其應(yīng)用
- 基于Linux的嵌入式實(shí)時(shí)數(shù)據(jù)庫(kù)的設(shè)計(jì)
- JAVA在SQLite嵌入式數(shù)據(jù)庫(kù)中的應(yīng)用
- 嵌入式移動(dòng)數(shù)據(jù)庫(kù)應(yīng)用研究
- 嵌入式移動(dòng)數(shù)據(jù)庫(kù)NimbleDB的實(shí)現(xiàn)
- 嵌入式移動(dòng)數(shù)據(jù)庫(kù)研究
- 工控應(yīng)用系統(tǒng)中嵌入式數(shù)據(jù)庫(kù)實(shí)時(shí)性研究
- 一種微型嵌入式數(shù)據(jù)庫(kù)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 什么是數(shù)據(jù)庫(kù) 1474次閱讀
- 常見(jiàn)的數(shù)據(jù)庫(kù)管理 2110次閱讀
- 嵌入式系統(tǒng)的全面解析 3280次閱讀
- 嵌入式移動(dòng)數(shù)據(jù)庫(kù)的結(jié)構(gòu)體系特點(diǎn)及優(yōu)化查詢方法研究 2346次閱讀
- 云數(shù)據(jù)庫(kù)和自建數(shù)據(jù)庫(kù)的區(qū)別及應(yīng)用 4668次閱讀
- linux系統(tǒng)POS嵌入式數(shù)據(jù)庫(kù)如何去構(gòu)建 917次閱讀
- 嵌入式系統(tǒng)開(kāi)發(fā)經(jīng)常使用哪一些數(shù)據(jù)庫(kù) 1758次閱讀
- 英創(chuàng)信息技術(shù)嵌入式數(shù)據(jù)庫(kù)SQLC介紹 2043次閱讀
- 基于μC/OS嵌入式操作系統(tǒng)的嵌入式數(shù)據(jù)管理設(shè)計(jì) 1241次閱讀
- 基于嵌入式數(shù)據(jù)庫(kù)的礦場(chǎng)安全系統(tǒng)設(shè)計(jì)方案詳解 1145次閱讀
- 內(nèi)存數(shù)據(jù)庫(kù)系統(tǒng)全面解析 4248次閱讀
- 基于嵌入式數(shù)據(jù)庫(kù)的海量存儲(chǔ)技術(shù)解析 2819次閱讀
- 用JDBC連接MySQL數(shù)據(jù)庫(kù)并進(jìn)行簡(jiǎn)單的增刪改查操作 6322次閱讀
- 什么是數(shù)據(jù)庫(kù)技術(shù)_數(shù)據(jù)庫(kù)技術(shù)的基礎(chǔ)知識(shí) 1.3w次閱讀
- 移動(dòng)Agent嵌入式移動(dòng)數(shù)據(jù)庫(kù)詳解及實(shí)現(xiàn)查詢優(yōu)化 1272次閱讀
下載排行
本周
- 1TC358743XBG評(píng)估板參考手冊(cè)
- 1.36 MB | 330次下載 | 免費(fèi)
- 2開(kāi)關(guān)電源基礎(chǔ)知識(shí)
- 5.73 MB | 6次下載 | 免費(fèi)
- 3100W短波放大電路圖
- 0.05 MB | 4次下載 | 3 積分
- 4嵌入式linux-聊天程序設(shè)計(jì)
- 0.60 MB | 3次下載 | 免費(fèi)
- 5基于FPGA的光纖通信系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 0.61 MB | 2次下載 | 免費(fèi)
- 6基于FPGA的C8051F單片機(jī)開(kāi)發(fā)板設(shè)計(jì)
- 0.70 MB | 2次下載 | 免費(fèi)
- 751單片機(jī)窗簾控制器仿真程序
- 1.93 MB | 2次下載 | 免費(fèi)
- 8基于51單片機(jī)的RGB調(diào)色燈程序仿真
- 0.86 MB | 2次下載 | 免費(fèi)
本月
- 1OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 2555集成電路應(yīng)用800例(新編版)
- 0.00 MB | 33564次下載 | 免費(fèi)
- 3接口電路圖大全
- 未知 | 30323次下載 | 免費(fèi)
- 4開(kāi)關(guān)電源設(shè)計(jì)實(shí)例指南
- 未知 | 21548次下載 | 免費(fèi)
- 5電氣工程師手冊(cè)免費(fèi)下載(新編第二版pdf電子書(shū))
- 0.00 MB | 15349次下載 | 免費(fèi)
- 6數(shù)字電路基礎(chǔ)pdf(下載)
- 未知 | 13750次下載 | 免費(fèi)
- 7電子制作實(shí)例集錦 下載
- 未知 | 8113次下載 | 免費(fèi)
- 8《LED驅(qū)動(dòng)電路設(shè)計(jì)》 溫德?tīng)栔?/a>
- 0.00 MB | 6653次下載 | 免費(fèi)
總榜
- 1matlab軟件下載入口
- 未知 | 935054次下載 | 免費(fèi)
- 2protel99se軟件下載(可英文版轉(zhuǎn)中文版)
- 78.1 MB | 537796次下載 | 免費(fèi)
- 3MATLAB 7.1 下載 (含軟件介紹)
- 未知 | 420026次下載 | 免費(fèi)
- 4OrCAD10.5下載OrCAD10.5中文版軟件
- 0.00 MB | 234315次下載 | 免費(fèi)
- 5Altium DXP2002下載入口
- 未知 | 233046次下載 | 免費(fèi)
- 6電路仿真軟件multisim 10.0免費(fèi)下載
- 340992 | 191185次下載 | 免費(fèi)
- 7十天學(xué)會(huì)AVR單片機(jī)與C語(yǔ)言視頻教程 下載
- 158M | 183278次下載 | 免費(fèi)
- 8proe5.0野火版下載(中文版免費(fèi)下載)
- 未知 | 138040次下載 | 免費(fèi)
評(píng)論