将 H2 内存数据库复制到 postgresql(反之亦然)

Posted

技术标签:

【中文标题】将 H2 内存数据库复制到 postgresql(反之亦然)【英文标题】:Replicate H2 in-memory database to postgresql (and vice versa) 【发布时间】:2019-10-09 19:15:43 【问题描述】:

我有一个 Java Spring 项目,它进行了大量的数据库读取。我可用的数据库是远程机器上的共享 postgresql 数据库,从它获取数据非常慢,尤其是当我来回做很多事情时。

当我进行本地测试和开发时,我使用嵌入式 H2 内存数据库。事情很容易快 100 倍。

这让我很奇怪。有没有办法使用嵌入式 H2 内存数据库,以便:

数据操作(INSERT、UPDATE、DELETE)被(“最终”)复制到 PostgreSQL 数据库中 Spring 项目启动/重启时,H2 数据库会自动填充 PostgreSQL 服务器的数据

这将使我能够使用快速 H2 来提供无缝的用户体验,同时还将数据存储在更长期的数据存储中。在某种程度上,我会将 H2 用作 PostgreSQL 数据库的完全缓存版本。

是否有一种已知/标准化的方法来解决这个问题? Google for H2 和 PostgreSQL 和复制为我提供了从一个过渡到另一个的结果,但我没有发现将其中一个用作另一个缓存。

【问题讨论】:

【参考方案1】:

我一直在寻找以 Spring / JPA / Hibernate 为重点的答案,但如果没有答案:我可能已经找到了一个可供调查的替代域。专用的数据库复制软件可能能够管理这一点。具体来说,我发现了SymmetricDS,它似乎(我只是粗略地看了一下文档)就像它可能能够嵌入到我的 Spring 应用程序中一样,对我的嵌入式内存 H2 数据库进行初始加载启动,然后将数据更改滴流到远程数据库。

(我与 SymmetricDS 没有任何关系,只是看起来它可能是一个解决方案。)

【讨论】:

以上是关于将 H2 内存数据库复制到 postgresql(反之亦然)的主要内容,如果未能解决你的问题,请参考以下文章

用于与 postgresql 在内存中兼容 h2 的 Spring Boot 属性

如果我将数据源从 `H2` 切换到 `postgresql`,`hibernate.hbm2ddl.import_files` 属性将停止工作

如何使用 H2 嵌入式数据库创建 H2 内存数据库

INNER JOIN 与 h2 数据库和 postgresql 数据库的区别

如何使用 H2 内存数据库编写单元测试

尝试针对 PostgreSQL 数据库为 Spring 开发设置 H2 数据库