目录
主要特点
附加的功能
SQL 支持
安全功能
其他功能和工具
使用中的 H2
连接方式
嵌入式模式
服务器模式
混合模式
主要特点
- 非常快的数据库引擎
- 开源
- 用 Java 编写
- 支持标准 SQL、JDBC API
- 嵌入式和服务器模式,集群支持
- 强大的安全功能
- 可以使用 PostgreSQL ODBC 驱动程序
- 多版本并发
附加的功能
- 基于磁盘或内存中的数据库和表、只读数据库支持、临时表
- 事务支持(未提交读、已提交读、可重复读、快照)、2-phase-commit
- 多连接,行级锁定
- 基于成本的优化器,使用遗传算法进行复杂查询,零管理
- 可滚动和可更新的结果集支持,大型结果集,外部结果排序,函数可以返回一个结果集
- 加密数据库 (AES)、SHA-256 密码加密、加密功能、SSL
SQL 支持
- 支持多种模式,信息模式
- 具有级联的参照完整性/外键约束,检查约束
- 内连接和外连接、子查询、只读视图和内联视图
- 触发器和 Java 函数/存储过程
- 许多内置功能,包括 XML 和无损数据压缩
- 广泛的数据类型,包括大对象 (BLOB/CLOB) 和数组
- 序列和标识列,生成的列(可用于基于函数的索引)
- ORDER BY、GROUP BY、HAVING、UNION、OFFSET / FETCH(包括 PERCENT 和 WITH TIES)、LIMIT、TOP、DISTINCT / DISTINCT ON (...)
- 窗口函数
- 整理支持,包括对 ICU4J 库的支持
- 支持用户和角色
- IBM DB2、Apache Derby、HSQLDB、MS SQL Server、MySQL、Oracle 和 PostgreSQL 的兼容模式。
安全功能
- 包括 SQL 注入问题的解决方案
- 用户密码认证使用 SHA-256 和 salt
- 对于服务器模式连接,用户密码永远不会通过网络以纯文本形式传输(即使使用不安全的连接;这仅适用于 TCP 服务器,而不适用于 H2 控制台;如果您将密码设置为数据库 URL)
- 所有数据库文件(包括可用于备份数据的脚本文件)都可以使用 AES-128 加密算法进行加密
- 远程 JDBC 驱动程序支持基于 TLS 的 TCP/IP 连接
- 内置 Web 服务器支持通过 TLS 的连接
- 可以使用字符数组而不是字符串将密码发送到数据库
其他功能和工具
- 占用空间小(约 2.5 MB),内存要求低
- 多种索引类型(b-tree、tree、hash)
- 支持多维索引
- CSV(逗号分隔值)文件支持
- 支持链接表和内置的虚拟“范围”表
- 支持该EXPLAIN PLAN说法;复杂的跟踪选项
- 可以延迟或禁用数据库关闭以提高性能
- 具有自动完成功能的基于 Web 的控制台应用程序(翻译成多种语言)
- 数据库可以生成SQL脚本文件
- 包含一个可以转储数据库内容的恢复工具
- 支持变量(例如计算运行总计)
- 自动重新编译准备好的语句
- 使用少量数据库文件
- 对每条记录和日志条目使用校验和以确保数据完整性
- 经过良好测试(高代码覆盖率,随机压力测试)
使用中的 H2
有关与 H2 一起使用或使用 H2 的应用程序列表,请参阅: 链接。
连接方式
支持以下连接模式:
- 嵌入式模式(使用 JDBC 的本地连接)
- 服务器模式(通过 TCP/IP 使用 JDBC 或 ODBC 进行远程连接)
- 混合模式(本地和远程同时连接)
嵌入式模式
在嵌入式模式下,应用程序使用 JDBC 从同一 JVM 中打开数据库。这是最快和最简单的连接模式。缺点是一个数据库在任何时候都只能在一个虚拟机(和类加载器)中打开。与所有模式一样,支持持久性和内存数据库。对同时打开的数据库数或打开的连接数没有限制。
在嵌入式模式下,I/O 操作可以由执行 SQL 命令的应用程序线程执行。应用程序可能不会中断这些线程,它可能导致数据库损坏,因为 JVM 在线程中断期间关闭了 I/O 句柄。考虑控制应用程序执行的其他方法。当可能发生中断时,可以使用async: 文件系统作为解决方法,但不能保证完全安全。建议改用客户端-服务器模式,客户端可能会中断自己的线程。
服务器模式
使用服务器模式(有时称为远程模式或客户端/服务器模式)时,应用程序使用 JDBC 或 ODBC API 远程打开数据库。需要在同一台或另一台虚拟机或另一台计算机上启动服务器。通过连接到该服务器,许多应用程序可以同时连接到同一个数据库。在内部,服务器进程以嵌入模式打开数据库。
服务器模式比嵌入式模式慢,因为所有数据都通过 TCP/IP 传输。与所有模式一样,支持持久性和内存数据库。每个服务器同时打开的数据库数量或打开的连接数没有限制。
混合模式
混合模式是嵌入式模式和服务器模式的结合。第一个连接到数据库的应用程序在嵌入式模式下执行此操作,但也会启动服务器,以便其他应用程序(在不同进程或虚拟机中运行)可以同时访问相同的数据。本地连接与仅在嵌入式模式下使用数据库一样快,而远程连接则稍慢一些。
服务器可以在应用程序内启动和停止(使用服务器 API),也可以自动启动和停止(自动混合模式)。使用自动混合模式时,所有想要连接到数据库的客户端(无论是本地连接还是远程连接)都可以使用完全相同的数据库 URL 进行连接。