H2和HSQLDB哪个更好?

95

HSQLDB 2.0即将发布,我想知道它是否能胜过H2数据库,因为据我所知,大多数用户更喜欢H2而非HSQLDB。我对HSQLDB 2.0的MVCC支持很感兴趣。我了解到H2上的MVCC仍处于实验阶段。就支持/文档、并发性和性能而言,两者哪一个更好?


6
你的使用情境是什么?你将对数据执行哪些查询?你的数据有多大?你的应用程序读取或写入负载较重吗? - Matt
36
另一个完全合适的问题被关闭了。 - rtcarlson
我觉得很有趣的是,尽管问题只提到性能作为其中一个方面,但人们似乎更关注答案。我对支持/文档、易用性(易用性、直观性、功能集)以及可靠性等其他领域更感兴趣。 - StaxMan
请查看http://www.jpab.org/Hibernate/H2/embedded/Hibernate/HSQLDB/embedded.html。 - Beto Neto
2个回答

63
请注意,我在2011年提供了这个答案。它可能已经过时。
我的公司开发了一个数据库抽象库(jOOQ),支持两种数据库。我们的集成测试涵盖了许多功能,包括调用存储过程和函数、数组、嵌套选择等。就DML而言,我发现HSQLDB 2.1对于小型数据库要比H2 1.3稍微快一些。
然而,在DDL操作以及启动/关闭实例方面,HSQLDB的性能远远超过H2,即使针对小型数据库(因为H2每次数据库启动时都会使用javac编译存储函数!)。这取决于您存储存储函数的方式。显然,这是一个相当jOOQ特定的“问题”,请参见Thomas Mueller的评论。
另一方面,我同意用户trashgod的观点,您应该根据合理的模式和用例自己测试性能。

7
只有当存储函数作为源代码存储时才会重新编译,这是HSQLDB中没有的功能(据我所知)。如果使用预编译的存储函数,则不会有这样的开销。 - Thomas Mueller
2
@ThomasMueller:谢谢,我不知道这个。这将有助于大幅加快我的集成测试速度。我会相应地调整我的答案。HSQLDB具有类似PL/SQL的过程化语言,我认为更强大。但我不确定那种语言是预编译还是解释执行的... - Lukas Eder

50

10
“垃圾桶是一个重要的设计工具”——loc. cit. - trashgod
3
谢谢提供“heritage”链接。它们很好地总结了历史。首先是HSQLDB(Hypersonic SQL),然后是H2,但是截至今天,HSQLDB和H2没有共享任何代码,它们是独立的项目。 - specialk1st
1
@specialk1st: 对的,这里的“heritage”指的是共同的作者,而不是共同的代码。 - trashgod

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接