H2数据库适合做大表的嵌入式数据库吗?
Is H2 database suitable as embedded database with large tables?
我们的应用程序目前使用 H2 作为嵌入式数据库,我们有以下场景:
将H2用作"temporary database"。应用程序任务每 30 分钟定期将插入到 H2 中的数据 to/inserted 发送到 Oracle 数据库("official" 数据库),然后从 H2 中删除;
这个主要 "temporary table" 在一个 table 中平均每小时插入 183 行。
我们还有另外两个大型 tables(分别为 2100 万条和 150 万条记录)供主要应用程序任务使用,仅用于查询。还有另一个应用程序任务从 Oracle 增量更新这些 table,在 H2 行中更新自上次同步以来在 Oracle 中的 created/updated/deleted。它也每 30 分钟发生一次。
到目前为止,我们已经使用 H2 1.5 年了,没有任何问题,但是我们在 Red Hat official documentation 中发现了以下关于 H2 的警告:
However, it should not be used in a production environment. It is a very small, self-contained datasource that supports all of the standards needed for testing and building applications, but is not robust or scalable enough for production use.
H2 的设计是否可靠,可以在这种情况下用于生产环境?
是否有任何基准支持这一点? H2 official performance benchmark 显示执行时间和性能使用情况,但不说明数据量。
嵌入式H2数据库是内存中的还是持久的?我主要关心的是故障转移。如果您的 JVM 出现故障,您将丢失自上次 Oracle 同步点以来的所有数据。
除此之外,嵌入式 H2 数据库只能在与您的应用程序相同的 JVM 中使用。因此,您将无法扩展到具有多个 JVM 的高可用性架构,每个 JVM 都有自己的 H2 数据库,并且您无法跨 JVM 共享该数据。
最后是堆的问题。如果您使用的是内存中的 JVM,那么您的堆将随着数据量的增加而增长,最终您可能 运行 内存不足并导致抖动,因为垃圾收集器试图阻止您 运行宁出堆。
其他限制可在此处找到:
http://www.h2database.com/html/advanced.html#limits_limitations
我们的应用程序目前使用 H2 作为嵌入式数据库,我们有以下场景:
将H2用作"temporary database"。应用程序任务每 30 分钟定期将插入到 H2 中的数据 to/inserted 发送到 Oracle 数据库("official" 数据库),然后从 H2 中删除;
这个主要 "temporary table" 在一个 table 中平均每小时插入 183 行。
我们还有另外两个大型 tables(分别为 2100 万条和 150 万条记录)供主要应用程序任务使用,仅用于查询。还有另一个应用程序任务从 Oracle 增量更新这些 table,在 H2 行中更新自上次同步以来在 Oracle 中的 created/updated/deleted。它也每 30 分钟发生一次。
到目前为止,我们已经使用 H2 1.5 年了,没有任何问题,但是我们在 Red Hat official documentation 中发现了以下关于 H2 的警告:
However, it should not be used in a production environment. It is a very small, self-contained datasource that supports all of the standards needed for testing and building applications, but is not robust or scalable enough for production use.
H2 的设计是否可靠,可以在这种情况下用于生产环境?
是否有任何基准支持这一点? H2 official performance benchmark 显示执行时间和性能使用情况,但不说明数据量。
嵌入式H2数据库是内存中的还是持久的?我主要关心的是故障转移。如果您的 JVM 出现故障,您将丢失自上次 Oracle 同步点以来的所有数据。
除此之外,嵌入式 H2 数据库只能在与您的应用程序相同的 JVM 中使用。因此,您将无法扩展到具有多个 JVM 的高可用性架构,每个 JVM 都有自己的 H2 数据库,并且您无法跨 JVM 共享该数据。
最后是堆的问题。如果您使用的是内存中的 JVM,那么您的堆将随着数据量的增加而增长,最终您可能 运行 内存不足并导致抖动,因为垃圾收集器试图阻止您 运行宁出堆。
其他限制可在此处找到: http://www.h2database.com/html/advanced.html#limits_limitations