我们的应用程序目前使用H2作为嵌入式数据库,我们有以下场景:
H2用作“临时数据库”。插入H2的数据定期由应用程序任务每30分钟发送/插入Oracle数据库(“官方”数据库),并从H2中删除;
这个主“临时表”在一张表中平均每小时插入183行。
主应用程序任务使用的另外两个大表(分别为2100万和150万条记录)仅用于查询。还有另一个应用程序任务是从Oracle逐步更新这些表,更新自上次同步以来在Oracle中创建/更新/删除的H2行。它也发生在每30分钟一次。
到目前为止,我们已经使用了H2 1年没有问题,但我们在Red Hat official documentation中发现了关于H2的以下警告:
但是,它不应该在生产环境中使用。它是一个非常小的,独立的数据源,支持测试和构建应用程序所需的所有标准,但不够强大或可扩展,不足以供生产使用。
在这样的场景中H2的设计和可靠性是否适用于生产环境?
是否有支持此功能的基准测试? H2 official performance benchmark显示执行时间和性能使用情况,但没有说明数据量。
答案 0 :(得分:1)
嵌入式H2数据库是内存还是持久?我主要担心的是故障转移。如果您的JVM出现故障,那么自上次Oracle同步点以来,您将丢失所有数据。
除此之外,嵌入式H2数据库只能在与应用程序相同的JVM中使用。因此,您无法扩展到具有多个JVM的高可用性体系结构,每个JVM都有自己的H2数据库,您将无法跨JVM共享该数据。
最后,还有堆的问题。如果您正在使用内存中的JVM,那么您的堆将随着数据量的增长而增长,并且甚至您可能会耗尽RAM并导致崩溃,因为垃圾收集器会尝试阻止您耗尽堆
其他限制可在此处找到: http://www.h2database.com/html/advanced.html#limits_limitations