新聞中心
隨著計(jì)算機(jī)技術(shù)的不斷發(fā)展,數(shù)據(jù)存儲(chǔ)和處理需求的也越來(lái)越多,而嵌入式KV數(shù)據(jù)庫(kù)則成為了一個(gè)備受關(guān)注的數(shù)據(jù)存儲(chǔ)解決方案。在眾多的嵌入式KV數(shù)據(jù)庫(kù)中,Java嵌入式KV數(shù)據(jù)庫(kù)是一款備受推崇的物聯(lián)網(wǎng)設(shè)備數(shù)據(jù)庫(kù)。

創(chuàng)新互聯(lián)建站專(zhuān)注于阜康企業(yè)網(wǎng)站建設(shè),成都響應(yīng)式網(wǎng)站建設(shè)公司,商城開(kāi)發(fā)。阜康網(wǎng)站建設(shè)公司,為阜康等地區(qū)提供建站服務(wù)。全流程定制網(wǎng)站建設(shè),專(zhuān)業(yè)設(shè)計(jì),全程項(xiàng)目跟蹤,創(chuàng)新互聯(lián)建站專(zhuān)業(yè)和態(tài)度為您提供的服務(wù)
本文將從以下幾個(gè)方面:
一、什么是Java嵌入式KV數(shù)據(jù)庫(kù)
Java嵌入式KV數(shù)據(jù)庫(kù)是一種使用Java語(yǔ)言編寫(xiě)的,嵌入式KV存儲(chǔ)引擎。它是基于B+樹(shù)存儲(chǔ)、LRU淘汰策略的一種輕量級(jí)、高性能的存儲(chǔ)引擎,可以將數(shù)據(jù)存儲(chǔ)在內(nèi)存或本地磁盤(pán)中。Java嵌入式KV數(shù)據(jù)庫(kù)在存儲(chǔ)數(shù)據(jù)方面有很多優(yōu)點(diǎn),例如高吞吐量、嵌入式、易用性等。
二、Java嵌入式KV數(shù)據(jù)庫(kù)的特點(diǎn)
1.高性能:Java嵌入式KV數(shù)據(jù)庫(kù)以高速度和高吞吐量的方式完成數(shù)據(jù)存儲(chǔ)和管理。
2.嵌入式:Java嵌入式KV數(shù)據(jù)庫(kù)可以輕松地集成到應(yīng)用程序中,不需要獨(dú)立的數(shù)據(jù)庫(kù)服務(wù)器。
3.易于使用:Java嵌入式KV數(shù)據(jù)庫(kù)提供了簡(jiǎn)單易用的API,并支持類(lèi)SQL的查詢(xún)和數(shù)據(jù)分析。
4.可伸縮性:Java嵌入式KV數(shù)據(jù)庫(kù)支持分布式數(shù)據(jù)存儲(chǔ)和多種分片策略,可以滿(mǎn)足更大規(guī)模的應(yīng)用需求。
5.數(shù)據(jù)一致性:Java嵌入式KV數(shù)據(jù)庫(kù)支持ACID事務(wù),可以確保數(shù)據(jù)的一致性和完整性。
三、Java嵌入式KV數(shù)據(jù)庫(kù)的應(yīng)用場(chǎng)景
Java嵌入式KV數(shù)據(jù)庫(kù)可以應(yīng)用于很多場(chǎng)景,例如:
1.物聯(lián)網(wǎng)設(shè)備:Java嵌入式KV數(shù)據(jù)庫(kù)的小時(shí)尺寸、節(jié)能和高性能的特性,可以滿(mǎn)足物聯(lián)網(wǎng)設(shè)備的高效、高速的數(shù)據(jù)存儲(chǔ)要求。
2.移動(dòng)應(yīng)用程序:Java嵌入式KV數(shù)據(jù)庫(kù)可以輕松地集成到移動(dòng)應(yīng)用程序中,不需要獨(dú)立的數(shù)據(jù)庫(kù)服務(wù)器,可以輕易地存儲(chǔ)和管理數(shù)據(jù)。
3.游戲開(kāi)發(fā):Java嵌入式KV數(shù)據(jù)庫(kù)可以高效的存儲(chǔ)和訪(fǎng)問(wèn)游戲的數(shù)據(jù),例如玩家數(shù)據(jù)、游戲設(shè)置等。
4.本地緩存:Java嵌入式KV數(shù)據(jù)庫(kù)可以作為本地緩存存儲(chǔ)引擎,為應(yīng)用程序提供更快的響應(yīng)速度。
四、Java嵌入式KV數(shù)據(jù)庫(kù)的優(yōu)勢(shì)
Java嵌入式KV數(shù)據(jù)庫(kù)相對(duì)于傳統(tǒng)關(guān)系型數(shù)據(jù)庫(kù)(RDBMS)具有以下優(yōu)勢(shì):
1.高性能:Java嵌入式KV數(shù)據(jù)庫(kù)由于采用的是內(nèi)存存儲(chǔ)和B+樹(shù)索引,具有更高的讀寫(xiě)速度。
2.易維護(hù):Java嵌入式KV數(shù)據(jù)庫(kù)不需要獨(dú)立的數(shù)據(jù)庫(kù)服務(wù)器,具有更低的維護(hù)成本。
3.可擴(kuò)展性:Java嵌入式KV數(shù)據(jù)庫(kù)可以容易地進(jìn)行分布式擴(kuò)展。
4.易使用:Java嵌入式KV數(shù)據(jù)庫(kù)具有類(lèi)SQL的查詢(xún)語(yǔ)言、簡(jiǎn)單易用的API和圖形化的管理工具。
5.節(jié)能環(huán)保:Java嵌入式KV數(shù)據(jù)庫(kù)具有更小的存儲(chǔ)空間和較低的能耗,對(duì)環(huán)境更加友好。
五、結(jié)論
Java嵌入式KV數(shù)據(jù)庫(kù)是一款輕量級(jí)、高性能、易用的數(shù)據(jù)庫(kù)解決方案,可以應(yīng)用于很多場(chǎng)景,如物聯(lián)網(wǎng)設(shè)備、移動(dòng)應(yīng)用程序、游戲開(kāi)發(fā)和本地緩存等。相較于傳統(tǒng)的關(guān)系型數(shù)據(jù)庫(kù)具有更高的性能、更低的維護(hù)成本、更好的可擴(kuò)展性和更加友好的環(huán)保性。因此,在應(yīng)用場(chǎng)景滿(mǎn)足要求時(shí),Java嵌入式KV數(shù)據(jù)庫(kù)是一個(gè)非常值得選擇的存儲(chǔ)引擎。
成都網(wǎng)站建設(shè)公司-創(chuàng)新互聯(lián)為您提供網(wǎng)站建設(shè)、網(wǎng)站制作、網(wǎng)頁(yè)設(shè)計(jì)及定制高端網(wǎng)站建設(shè)服務(wù)!
java 6 中自帶的javaDB(derby)數(shù)據(jù)庫(kù),是否不用啟動(dòng)服務(wù),直接可以和jdk進(jìn)行交互呀?
derby, 前兩天仔芹宏細(xì)看了一下居然是以前的cloudspace,以前就出名了,笑液后來(lái)幾經(jīng)轉(zhuǎn)手倒賣(mài),最后被ibm捐贈(zèng)給apache了。
sun挺讓人失望的,應(yīng)該嵌入一個(gè)oo數(shù)據(jù)庫(kù),比如db4o之嫌升冊(cè)類(lèi)的。搞這么個(gè)雞肋真是無(wú)聊。
新安裝了 JDK 6 的程序員們也許會(huì)發(fā)現(xiàn),除了傳統(tǒng)的 bin、jre 等目錄,JDK 6 新增了一個(gè)名為 db 的目錄。這便是 Java 6 的新成員:Java DB。這是一個(gè)純 Java 實(shí)現(xiàn)、開(kāi)源的數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS),源于 Apache 軟件基金會(huì)(ASF)名下的項(xiàng)目 Derby。它只有 2MB 大小,對(duì)比動(dòng)輒上 G 的數(shù)據(jù)庫(kù)來(lái)說(shuō)可謂袖珍。但這并不妨礙 Derby 功能齊備,支持幾乎大部分的數(shù)據(jù)庫(kù)應(yīng)用所需要的特性。更難能可貴的是,依托于 ASF 強(qiáng)大的社區(qū)力量,Derby 得到了包括 IBM 和 Sun 等大公司以及全世界優(yōu)秀程序員們的支持。這也難怪 Sun 公司會(huì)選擇其 10.2.2 版本納入到 JDK 6 中,作為內(nèi)嵌的數(shù)據(jù)庫(kù)。這就好像為 JDK 注入了一股全新的活力:Java 程序員不再需要耗費(fèi)大量精力安裝和配置數(shù)據(jù)庫(kù),就能進(jìn)行安全、易用、標(biāo)準(zhǔn)、并且免費(fèi)的數(shù)據(jù)庫(kù)編程。在這一章中吵櫻純,我們將初窺 Java DB 的世界,來(lái)探究如何使用它編寫(xiě)出功能豐富的程序。
Hello, Java DB:內(nèi)嵌模式的 Derby
既然有了內(nèi)嵌(embedded)的數(shù)據(jù)庫(kù),就讓我們從一個(gè)簡(jiǎn)單的范例開(kāi)始,試著使用它吧。這個(gè)程序做了升咐大多數(shù)數(shù)據(jù)庫(kù)應(yīng)用都可能會(huì)做的操作:在 DBMS 中創(chuàng)建了一個(gè)名為 helloDB 的數(shù)據(jù)庫(kù);創(chuàng)建了一張數(shù)據(jù)表,取名為 hellotable;向表內(nèi)插入了兩條數(shù)據(jù);然后,查詢(xún)數(shù)據(jù)并將結(jié)果打印在控制臺(tái)上;最后,刪除表和數(shù)據(jù)庫(kù),釋放資源。
public class HelloJavaDB {
public static void main(String args) {
try { // load the driver
Class.forName(“org.apache.derby.jdbc.EmbeddedDriver”).newInstance();
System.out.println(“Load the embedded driver”);
Connection conn = null;
Properties props = new Properties();
props.put(“user”頌游, “user1”); props.put(“password”, “user1”);
//create and connect the database named helloDB
conn=DriverManager.getConnection(“jdbc:derby:helloDB;create=true”, props);
System.out.println(“create and connect to helloDB”);
conn.setAutoCommit(false);
// create a table and insert two records
Statement s = conn.createStatement();
s.execute(“create table hellotable(name varchar(40), score int)”);
System.out.println(“Created table hellotable”);
s.execute(“insert into hellotable values(‘Ruth Cao’, 86)”);
s.execute(“insert into hellotable values (‘Flora Shi’, 92)”);
// list the two records
ResultSet rs = s.executeQuery(
“SELECT name, score FROM hellotable ORDER BY score”);
System.out.println(“namettscore”);
while(rs.next()) {
StringBuilder builder = new StringBuilder(rs.getString(1));
builder.append(“t”);
builder.append(rs.getInt(2));
System.out.println(builder.toString());
}
// delete the table
s.execute(“drop table hellotable”);
System.out.println(“Dropped table hellotable”);
rs.close();
s.close();
System.out.println(“Closed result set and statement”);
conn.commit();
conn.close();
System.out.println(“Committed transaction and closed connection”);
try { // perform a clean shutdown
DriverManager.getConnection(“jdbc:derby:;shutdown=true”);
} catch (SQLException se) {
System.out.println(“Database shut down normally”);
}
} catch (Throwable e) {
// handle the exception
}
System.out.println(“SimpleApp finished”);
}
}
隨后,我們?cè)诿钚校ū纠秊?Windows 平臺(tái),當(dāng)然,其它系統(tǒng)下稍作改動(dòng)即可)下鍵入以下命令:
清單 2. 運(yùn)行 HelloJavaDB 命令
java –cp .;%JAVA_HOME%dblibderby.jar HelloJavaDB
圖 1. HelloJavaDB 程序的執(zhí)行結(jié)果
上述的程序和以往沒(méi)什么區(qū)別。不同的是我們不需要再為 DBMS 的配置而勞神,因?yàn)?Derby 已經(jīng)自動(dòng)地在當(dāng)前目錄下新建了一個(gè)名為 helloDB 的目錄,來(lái)物理地存儲(chǔ)數(shù)據(jù)和日志。需要做的只是注意命名問(wèn)題:在內(nèi)嵌模式下驅(qū)動(dòng)的名字應(yīng)為 org.apache.derby.jdbc.EmbeddedDriver;創(chuàng)建一個(gè)新數(shù)據(jù)庫(kù)時(shí)需要在協(xié)議后加入 create=true。另外,關(guān)閉所有數(shù)據(jù)庫(kù)以及 Derby 的引擎可以使用以下代碼:
清單 3. 關(guān)閉所有數(shù)據(jù)庫(kù)及 Derby 引擎
DriverManager.getConnection(“jdbc:derby:;shutdown=true”);
如果只想關(guān)閉一個(gè)數(shù)據(jù)庫(kù),那么則可以調(diào)用:
清單 4. 關(guān)閉一個(gè)數(shù)據(jù)庫(kù)
DriverManager.getConnection(“jdbc:derby:helloDB;shutdown=true “);
這樣,使用嵌入模式的 Derby 維護(hù)和管理數(shù)據(jù)庫(kù)的成本接近于 0。這對(duì)于希望專(zhuān)心寫(xiě)代碼的人來(lái)說(shuō)不失為一個(gè)好消息。然而有人不禁要問(wèn):既然有了內(nèi)嵌模式,為什么大多數(shù)的 DBMS 都沒(méi)有采取這樣的模式呢?不妨做一個(gè)小實(shí)驗(yàn)。當(dāng)我們同時(shí)在兩個(gè)命令行窗口下運(yùn)行 HelloJavaDB 程序。結(jié)果一個(gè)的結(jié)果與剛才一致,而另一個(gè)卻出現(xiàn)了錯(cuò)誤,如 圖 2 所示。
圖 2. 內(nèi)嵌模式的局限
錯(cuò)誤的原因其實(shí)很簡(jiǎn)單:在使用內(nèi)嵌模式時(shí),Derby 本身并不會(huì)在一個(gè)獨(dú)立的進(jìn)程中,而是和應(yīng)用程序一起在同一個(gè) Java 虛擬機(jī)(JVM)里運(yùn)行。因此,Derby 如同應(yīng)用所使用的其它 jar 文件一樣變成了應(yīng)用的一部分。這就不難理解為什么在 classpath 中加入 derby 的 jar 文件,我們的示例程序就能夠順利運(yùn)行了。這也說(shuō)明了只有一個(gè) JVM 能夠啟動(dòng)數(shù)據(jù)庫(kù):而兩個(gè)跑在不同 JVM 實(shí)例里的應(yīng)用自然就不能夠訪(fǎng)問(wèn)同一個(gè)數(shù)據(jù)庫(kù)了。
鑒于上述的局限性,和來(lái)自不同 JVM 的多個(gè)連接想訪(fǎng)問(wèn)一個(gè)數(shù)據(jù)庫(kù)的需求,下一節(jié)將介紹 Derby 的另一種模式:網(wǎng)絡(luò)服務(wù)器(Network Server)。
網(wǎng)絡(luò)服務(wù)器模式
如上所述,網(wǎng)絡(luò)服務(wù)器模式是一種更為傳統(tǒng)的客戶(hù)端/服務(wù)器模式。我們需要啟動(dòng)一個(gè) Derby 的網(wǎng)絡(luò)服務(wù)器用于處理客戶(hù)端的請(qǐng)求,不論這些請(qǐng)求是來(lái)自同一個(gè) JVM 實(shí)例,還是來(lái)自于網(wǎng)絡(luò)上的另一臺(tái)機(jī)器。同時(shí),客戶(hù)端使用 DRDA(Distributed Relational Database Architecture)協(xié)議連接到服務(wù)器端。這是一個(gè)由 The Open Group 倡導(dǎo)的數(shù)據(jù)庫(kù)交互標(biāo)準(zhǔn)。圖 3 說(shuō)明了該模式的大體結(jié)構(gòu)。
由于 Derby 的開(kāi)發(fā)者們努力使得網(wǎng)絡(luò)服務(wù)器模式與內(nèi)嵌模式之間的差異變小,使得我們只需簡(jiǎn)單地修改 清單 1 中的程序就可以實(shí)現(xiàn)。如清單 5所示,我們?cè)?HelloJavaDB 中增添了一個(gè)新的函數(shù)和一些字符串變量。不難看出,新的代碼只是將一些在上一節(jié)中特別指出的字符串進(jìn)行了更改:驅(qū)動(dòng)類(lèi)為 org.apache.derby.jdbc.ClientDriver,而連接數(shù)據(jù)庫(kù)的協(xié)議則變成了 jdbc: URL 的字符串,而事實(shí)上,Derby 網(wǎng)絡(luò)的客戶(hù)端的連接格式為:jdbc: /databaseName。在這個(gè)例子中,我們使用了最簡(jiǎn)單的本地機(jī)器作為服務(wù)器,而端口則是 Derby 默認(rèn)的 1527 端口。
圖 3. Derby 網(wǎng)絡(luò)服務(wù)器模式架構(gòu)
清單 5. 網(wǎng)絡(luò)服務(wù)器模式下的 HelloJavaDB
public class HelloJavaDB {
public static String driver = “org.apache.derby.jdbc.EmbeddedDriver”;
public static String protocol = “jdbc:derby:”;
public static void main(String args) {
// same as before
}
private static void parseArguments(String args) {
if (args.length == 0 || args.length > 1) {
return;
}
if (args.equalsIgnoreCase(“derbyclient”)) {
framework = “derbyclient”;
driver = “org.apache.derby.jdbc.ClientDriver”;
protocol = “jdbc:
}
}
}
當(dāng)然,僅僅有客戶(hù)端是不夠的,我們還需要啟動(dòng)網(wǎng)絡(luò)服務(wù)器。Derby 中控制網(wǎng)絡(luò)服務(wù)器的類(lèi)是 org.apache.derby.drda.NetworkServerControl,因此鍵入以下命令即可。如果想了解 NetworkServerControl 更多的選項(xiàng),只要把 start 參數(shù)去掉就可以看到幫助信息了。關(guān)于網(wǎng)絡(luò)服務(wù)器端的實(shí)現(xiàn),都被 Derby 包含在 derbynet.jar 里。
清單 6. 啟動(dòng)網(wǎng)絡(luò)服務(wù)器
java -cp .;”C:Program FilesJavajdk1.6.0dblibderby.jar”;
“C:Program FilesJavajdk1.6.0dblibderbynet.jar”
org.apache.derby.drda.NetworkServerControl start
相對(duì)應(yīng)的,網(wǎng)絡(luò)客戶(hù)端的實(shí)現(xiàn)被包含在 derbyclient.jar 中。所以,只需要在 classpath 中加入該 jar 文件,修改后的客戶(hù)端就可以順利地讀取數(shù)據(jù)了。再一次嘗試著使用兩個(gè)命令行窗口去連接數(shù)據(jù)庫(kù),就能夠得到正確的結(jié)果了。如果不再需要服務(wù)器,那么使用 NetworkServerControl 的 shutdown 參數(shù)就能夠關(guān)閉服務(wù)器。
更多
至此,文章介紹了 Java SE 6 中的新成員:Java DB(Derby),也介紹了如何在內(nèi)嵌模式以及網(wǎng)絡(luò)服務(wù)器模式下使用 Java DB。當(dāng)然這只是淺嘗輒止,更多高級(jí)的選項(xiàng)還需要在 Sun 和 Derby 的文檔中尋找。在這一章的最后,我們將簡(jiǎn)單介紹幾個(gè) Java DB 的小工具來(lái)加快開(kāi)發(fā)速度。它們都位于 org.apache.derby.tools 包內(nèi),在開(kāi)發(fā)過(guò)程中需要獲取信息或者測(cè)試可以用到。
? ij:一個(gè)用來(lái)運(yùn)行 SQL 腳本的工具;
? dblook:為 Derby 數(shù)據(jù)庫(kù)作模式提?。⊿chema extraction),生成 DDL 的工具;
java 嵌入式 kv數(shù)據(jù)庫(kù)的介紹就聊到這里吧,感謝你花時(shí)間閱讀本站內(nèi)容,更多關(guān)于java 嵌入式 kv數(shù)據(jù)庫(kù),深入了解Java嵌入式KV數(shù)據(jù)庫(kù)的秘密,java 6 中自帶的javaDB(derby)數(shù)據(jù)庫(kù),是否不用啟動(dòng)服務(wù),直接可以和jdk進(jìn)行交互呀?的信息別忘了在本站進(jìn)行查找喔。
創(chuàng)新互聯(lián)(cdcxhl.com)提供穩(wěn)定的云服務(wù)器,香港云服務(wù)器,BGP云服務(wù)器,雙線(xiàn)云服務(wù)器,高防云服務(wù)器,成都云服務(wù)器,服務(wù)器托管。精選鉅惠,歡迎咨詢(xún):028-86922220。
新聞標(biāo)題:深入了解Java嵌入式KV數(shù)據(jù)庫(kù)的秘密(java嵌入式kv數(shù)據(jù)庫(kù))
文章源于:http://www.dlmjj.cn/article/djdgpho.html


咨詢(xún)
建站咨詢(xún)
