英文:
Populate h2 in memory database from a db2 database Spring Boot
问题
我目前正在构建一个使用h2内存数据库的Spring Boot服务。
这个数据库充当了中央db2数据库中部分数据的缓存,该db2数据库具有不同的数据库模式。
现在,当Spring Boot服务启动时,它需要使用来自中央数据库的最新数据填充h2数据库。
从性能的角度来看,有什么最佳方法可以做到这一点?
我目前正在考虑在我的服务中创建一个不同的数据源,首先获取数据,然后将数据保存到h2数据库。
这不像是一个好的解决方案,而且填充数据库需要相当长的时间。
英文:
I'm currently building a Spring Boot Service with a h2 in-memory database.
This Database acts as an cache for a part of the data on a central db2 database with a different database schema.
Now when the Spring boot service starts it needs to populate the h2 database with the latest data from the central database.
How can I do this in the best way performance wise?
I'm currently looking to create an different data-source in my service to first get the data and then save the data to the h2.
This doesn't feel like a good solution and it would take quite a long time to populate the database.
答案1
得分: 3
如果您想要使用 H2 而不是您的 DB2 数据库... 而且如果您不想在每次运行应用程序时重新创建数据库...
... 那么考虑使用 H2 文件,而不是内存:
http://www.h2database.com/html/features.html
jdbc:h2:[file:][<path>]<databaseName> jdbc:h2:~/test jdbc:h2:file:/data/sample jdbc:h2:file:C:/data/sample(仅适用于 Windows)
您可以在任何时候“初始化”文件(也许只需一次)。
性能应该是非常优秀的。
根据您的更新:
我仍然需要访问中央数据库以尽可能快的方式获取最新数据。中央数据库需要为其他访问此数据库的服务保持开放。
获取最新数据的“最快”方式... 是直接查询中央数据库。毫不犹豫地进行查询 - 没有任何条件。
但是,如果出于某种原因,您想要“缓存”“近期”数据的子集... 那么 H2 是一个很好的选择。
如果您不想在每次启动 H2 数据库时“重建”,那么将 H2 保存到文件中,而不是将其保存在内存中。
与查询中央数据库的网络开销相比,H2:mem 和 H2:file 之间的性能差异很小。
希望对您有所帮助...
英文:
If you want to use H2 instead of your DB2 database ... and if you don't want to re-create the database each time you run your app ...
... then consider using an H2 file, instead of in-memory:
> http://www.h2database.com/html/features.html
>
> jdbc:h2:[file:][<path>]<databaseName>
> jdbc:h2:~/test
> jdbc:h2:file:/data/sample
> jdbc:h2:file:C:/data/sample (Windows only)
You can "initialize" the file whenever you want (perhaps just once).
Performance should be excellent.
Per your update:
> I still need to access the central db to get the latest data in the
> fastest way possible. The central db needs to stay for other services
> also accessing this
The "fastest" way to get the very latest data ... is to query the central db directly. Period - no ifs/ands/buts.
But, if for whatever reason, you want to "cache" a subset of "recent" data ... then H2 is an excellent choice.
And if you don't want to "rebuild" each time you start your H2 database, then save H2 to a file instead of making it in-memory.
The performance difference between H2:mem and H2:file is small, compared to the network overhead of querying your central db.
'Hope that helps...
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。
评论