为什么将H2上的SQLite用于Java应用程序

Sri*_*san 5 sqlite h2

我需要在将在Linux设备上运行的Java应用程序中使用嵌入式数据库。该应用程序使用Hibernate和derby数据库。这不是一个Android应用程序。由于数据库性能下降,我们正在寻找更好的嵌入式数据库框架。从所有选项来看,H2似乎比SQLite更好,因为它不涉及交叉编译,也不需要构建JNI接口。因此,为什么没有更多地使用H2。是否有我不知道的任何缺点或问题。

Gau*_*ier 6

由于 H2 mv 存储中的数据库损坏,我最近从 H2 切换到 SQLite。

如果应用程序没有正确关闭,或者在意外重启的情况下,使用 MV 存储(默认)存储在文件上的 H2 数据库可能会损坏,并且您无法恢复数据。

SQLite 对腐败更加健壮。

在我的情况下,速度明智的 H2 要快得多。SQLite 事务的成本特别高,因此您应该更喜欢在事务中或通过批处理进行批量操作。

至于交叉编译,您可以使用 xerial 的 jdbc 驱动程序,该驱动程序随所有本机二进制文件预编译:https : //github.com/xerial/sqlite-jdbc

  • 我可以确认数据库损坏确实是 H2 的一个问题,尤其是当用户经常简单地终止您的应用程序时,因为他们相信这样做不会出现任何问题。 (6认同)

CL.*_*CL. 5

SQLite库是用C实现的,因此它确实需要(交叉)编译和JNI接口。但是,SQLite的使用如此广泛,以至于SQLite接口可能已经存在(作为语言运行时的一部分,或者作为JDBC驱动程序),并且使用它比将H2显式添加到项目中要简单得多。(在您的特定环境中,这可能实际上并非如此。)

如果您想加快应用程序的速度,则必须衡量自己。