深入了解Java嵌入式KV数据库的秘密 (java 嵌入式 kv数据库)

随着计算机技术的不断发展,数据存储和处理需求的也越来越多,而嵌入式KV数据库则成为了一个备受关注的数据存储解决方案。在众多的嵌入式KV数据库中,Java嵌入式KV数据库是一款备受推崇的物联网设备数据库。

本文将从以下几个方面:

一、什么是Java嵌入式KV数据库

Java嵌入式KV数据库是一种使用Java语言编写的,嵌入式KV存储引擎。它是基于B+树存储、LRU淘汰策略的一种轻量级、高性能的存储引擎,可以将数据存储在内存或本地磁盘中。Java嵌入式KV数据库在存储数据方面有很多优点,例如高吞吐量、嵌入式、易用性等。

二、Java嵌入式KV数据库的特点

1.高性能:Java嵌入式KV数据库以高速度和高吞吐量的方式完成数据存储和管理。

2.嵌入式:Java嵌入式KV数据库可以轻松地集成到应用程序中,不需要独立的数据库服务器。

3.易于使用:Java嵌入式KV数据库提供了简单易用的API,并支持类SQL的查询和数据分析。

4.可伸缩性:Java嵌入式KV数据库支持分布式数据存储和多种分片策略,可以满足更大规模的应用需求。

5.数据一致性:Java嵌入式KV数据库支持ACID事务,可以确保数据的一致性和完整性。

三、Java嵌入式KV数据库的应用场景

Java嵌入式KV数据库可以应用于很多场景,例如:

1.物联网设备:Java嵌入式KV数据库的小时尺寸、节能和高性能的特性,可以满足物联网设备的高效、高速的数据存储要求。

2.移动应用程序:Java嵌入式KV数据库可以轻松地集成到移动应用程序中,不需要独立的数据库服务器,可以轻易地存储和管理数据。

3.游戏开发:Java嵌入式KV数据库可以高效的存储和访问游戏的数据,例如玩家数据、游戏设置等。

4.本地缓存:Java嵌入式KV数据库可以作为本地缓存存储引擎,为应用程序提供更快的响应速度。

四、Java嵌入式KV数据库的优势

Java嵌入式KV数据库相对于传统关系型数据库(RDBMS)具有以下优势:

1.高性能:Java嵌入式KV数据库由于采用的是内存存储和B+树索引,具有更高的读写速度。

2.易维护:Java嵌入式KV数据库不需要独立的数据库服务器,具有更低的维护成本。

3.可扩展性:Java嵌入式KV数据库可以容易地进行分布式扩展。

4.易使用:Java嵌入式KV数据库具有类SQL的查询语言、简单易用的API和图形化的管理工具。

5.节能环保:Java嵌入式KV数据库具有更小的存储空间和较低的能耗,对环境更加友好。

五、结论

Java嵌入式KV数据库是一款轻量级、高性能、易用的数据库解决方案,可以应用于很多场景,如物联网设备、移动应用程序、游戏开发和本地缓存等。相较于传统的关系型数据库具有更高的性能、更低的维护成本、更好的可扩展性和更加友好的环保性。因此,在应用场景满足要求时,Java嵌入式KV数据库是一个非常值得选择的存储引擎。

相关问题拓展阅读:

java 6 中自带的javaDB(derby)数据库,是否不用启动服务,直接可以和jdk进行交互呀?

derby, 前两天仔芹宏细看了一下居然是以前的cloudspace,以前就出名了,笑液后来几经转手倒卖,最后被ibm捐赠给apache了。

sun挺让人失望的,应该嵌入一个oo数据库,比如db4o之嫌升册类的。搞这么个鸡肋真是无聊。

新安装了 JDK 6 的程序员们也许会发现,除了传统的 bin、jre 等目录,JDK 6 新增了一个名为 db 的目录。这便是 Java 6 的新成员:Java DB。这是一个纯 Java 实现、开源的数据库管理系统(DBMS),源于 Apache 软件基金会(ASF)名下的项目 Derby。它只有 2MB 大小,对比动辄上 G 的数据库来说可谓袖珍。但这并不妨碍 Derby 功能齐备,支持几乎大部分的数据库应用所需要的特性。更难能可贵的是,依托于 ASF 强大的社区力量,Derby 得到了包括 IBM 和 Sun 等大公司以及全世界优秀程序员们的支持。这也难怪 Sun 公司会选择其 10.2.2 版本纳入到 JDK 6 中,作为内嵌的数据库。这就好像为 JDK 注入了一股全新的活力:Java 程序员不再需要耗费大量精力安装和配置数据库,就能进行安全、易用、标准、并且免费的数据库编程。在这一章中吵樱纯,我们将初窥 Java DB 的世界,来探究如何使用它编写出功能丰富的程序。

Hello, Java DB:内嵌模式的 Derby

既然有了内嵌(embedded)的数据库,就让我们从一个简单的范例开始,试着使用它吧。这个程序做了升咐大多数数据库应用都可能会做的操作:在 DBMS 中创建了一个名为 helloDB 的数据库;创建了一张数据表,取名为 hellotable;向表内插入了两条数据;然后,查询数据并将结果打印在控制台上;最后,删除表和数据库,释放资源。

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”);

}

}

随后,我们在命令行(本例为 Windows 平台,当然,其它系统下稍作改动即可)下键入以下命令:

清单 2. 运行 HelloJavaDB 命令

java –cp .;%JAVA_HOME%dblibderby.jar HelloJavaDB

图 1. HelloJavaDB 程序的执行结果

上述的程序和以往没什么区别。不同的是我们不需要再为 DBMS 的配置而劳神,因为 Derby 已经自动地在当前目录下新建了一个名为 helloDB 的目录,来物理地存储数据和日志。需要做的只是注意命名问题:在内嵌模式下驱动的名字应为 org.apache.derby.jdbc.EmbeddedDriver;创建一个新数据库时需要在协议后加入 create=true。另外,关闭所有数据库以及 Derby 的引擎可以使用以下代码:

清单 3. 关闭所有数据库及 Derby 引擎

DriverManager.getConnection(“jdbc:derby:;shutdown=true”);

如果只想关闭一个数据库,那么则可以调用:

清单 4. 关闭一个数据库

DriverManager.getConnection(“jdbc:derby:helloDB;shutdown=true “);

这样,使用嵌入模式的 Derby 维护和管理数据库的成本接近于 0。这对于希望专心写代码的人来说不失为一个好消息。然而有人不禁要问:既然有了内嵌模式,为什么大多数的 DBMS 都没有采取这样的模式呢?不妨做一个小实验。当我们同时在两个命令行窗口下运行 HelloJavaDB 程序。结果一个的结果与刚才一致,而另一个却出现了错误,如 图 2 所示。

图 2. 内嵌模式的局限

错误的原因其实很简单:在使用内嵌模式时,Derby 本身并不会在一个独立的进程中,而是和应用程序一起在同一个 Java 虚拟机(JVM)里运行。因此,Derby 如同应用所使用的其它 jar 文件一样变成了应用的一部分。这就不难理解为什么在 classpath 中加入 derby 的 jar 文件,我们的示例程序就能够顺利运行了。这也说明了只有一个 JVM 能够启动数据库:而两个跑在不同 JVM 实例里的应用自然就不能够访问同一个数据库了。

鉴于上述的局限性,和来自不同 JVM 的多个连接想访问一个数据库的需求,下一节将介绍 Derby 的另一种模式:网络服务器(Network Server)。

网络服务器模式

如上所述,网络服务器模式是一种更为传统的客户端/服务器模式。我们需要启动一个 Derby 的网络服务器用于处理客户端的请求,不论这些请求是来自同一个 JVM 实例,还是来自于网络上的另一台机器。同时,客户端使用 DRDA(Distributed Relational Database Architecture)协议连接到服务器端。这是一个由 The Open Group 倡导的数据库交互标准。图 3 说明了该模式的大体结构。

由于 Derby 的开发者们努力使得网络服务器模式与内嵌模式之间的差异变小,使得我们只需简单地修改 清单 1 中的程序就可以实现。如清单 5所示,我们在 HelloJavaDB 中增添了一个新的函数和一些字符串变量。不难看出,新的代码只是将一些在上一节中特别指出的字符串进行了更改:驱动类为 org.apache.derby.jdbc.ClientDriver,而连接数据库的协议则变成了 jdbc: URL 的字符串,而事实上,Derby 网络的客户端的连接格式为:jdbc: /databaseName。在这个例子中,我们使用了最简单的本地机器作为服务器,而端口则是 Derby 默认的 1527 端口。

图 3. Derby 网络服务器模式架构

清单 5. 网络服务器模式下的 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:

}

}

}

当然,仅仅有客户端是不够的,我们还需要启动网络服务器。Derby 中控制网络服务器的类是 org.apache.derby.drda.NetworkServerControl,因此键入以下命令即可。如果想了解 NetworkServerControl 更多的选项,只要把 start 参数去掉就可以看到帮助信息了。关于网络服务器端的实现,都被 Derby 包含在 derbynet.jar 里。

清单 6. 启动网络服务器

java -cp .;”C:Program FilesJavajdk1.6.0dblibderby.jar”;

“C:Program FilesJavajdk1.6.0dblibderbynet.jar”

org.apache.derby.drda.NetworkServerControl start

相对应的,网络客户端的实现被包含在 derbyclient.jar 中。所以,只需要在 classpath 中加入该 jar 文件,修改后的客户端就可以顺利地读取数据了。再一次尝试着使用两个命令行窗口去连接数据库,就能够得到正确的结果了。如果不再需要服务器,那么使用 NetworkServerControl 的 shutdown 参数就能够关闭服务器。

更多

至此,文章介绍了 Java SE 6 中的新成员:Java DB(Derby),也介绍了如何在内嵌模式以及网络服务器模式下使用 Java DB。当然这只是浅尝辄止,更多高级的选项还需要在 Sun 和 Derby 的文档中寻找。在这一章的最后,我们将简单介绍几个 Java DB 的小工具来加快开发速度。它们都位于 org.apache.derby.tools 包内,在开发过程中需要获取信息或者测试可以用到。

• ij:一个用来运行 SQL 脚本的工具;

• dblook:为 Derby 数据库作模式提取(Schema extraction),生成 DDL 的工具;

java 嵌入式 kv数据库的介绍就聊到这里吧,感谢你花时间阅读本站内容,更多关于java 嵌入式 kv数据库,深入了解Java嵌入式KV数据库的秘密,java 6 中自带的javaDB(derby)数据库,是否不用启动服务,直接可以和jdk进行交互呀?的信息别忘了在本站进行查找喔。


数据运维技术 » 深入了解Java嵌入式KV数据库的秘密 (java 嵌入式 kv数据库)