现在我们在带有 Spring Data JPA (Hibernate) 的 spring boot 2 上有了带有 PostgreSQL 数据库的 java 项目。
对新架构的要求: 在 N 台计算机上,我们有工作场所。每个工作场所都使用具有不同配置的相同程序(为重新分配的数据库配置客户端)。 电脑数量并不大——10/20 台电脑。数据库必须是可扩展的(大量数据可以存储在磁盘上~1/2 Tb)。 每天可以从一个工作场所向数据库中插入多达 100 万行数据。 每个工作场所都使用重新分配的数据库——这意味着每个节点必须能够读/写数据,相互修改。并根据数据做出一些决定,在运行时由另一个工作场所修改(事务性)。 数据存储(磁盘数据库存档)必须能够存档并复制为备份快照。 项目必须可移植到使用 Spring Data JPA 2 的新架构和使用 liquibase 的数据库备份。适用于 Windows/Linux。
快速概览告诉我,目前最流行的重新分发的免费数据库是: 1)Redis 2) Apache 点燃 3) 淡褐色
我需要帮助来理解构建所述系统的方法。 首先,我尝试使用 redis 和 ignite。 Redis 很容易启动——但它的工作方式就像简单的 IMDG(在内存数据网格中)。但我需要将所有数据存储在持久性数据库中(在磁盘上,如 ignite persistence)。有没有办法将 redis 与现有的 PostgreSQL 数据库一起使用? Postgres 与所有节点同步,Redis 在内存缓存中使用每个工作场所生成的新数据。每 10 分钟数据在磁盘上刷新一次。 1)这可能吗?怎么办?
我也尝试使用 Ignite - 但我的项目在 spring boot 2 上运行。Spring data 2。Ignite 最后发布的版本是 2.6,而 spring data 2 支持将只出现在 apache ignite 2.7 中! 2) 我必须下载 2.7 版本的 nightly build,但如何在我的项目中使用它? (需要安装到本地 Maven 存储库?)
3) 毕竟,在那种情况下最好的架构是什么?数据存储提供程序将持久数据存储在磁盘上,与每个工作空间同步内存缓存并在超时时将内存数据持久保存到磁盘? 最好的解决方案是什么,我应该选择哪个数据库? (可能某些东西适用于现有的 PostgreSQL?)
谢谢)
最佳答案
您的用例听起来很像 Hazelcast 的常见用例。您可以将数据存储在内存中(即在 Hazelcast IMap 中),使用 MapStore/MapLoader 将更改保存到数据库中,或从数据库中读取。持久化更改可以根据您的配置以直写或后写方式完成。还有 spring boot 和 spring-jpa 集成可用。
此外,对于 10-20 台机器,您要存储的数据量相当大,因此您可能需要查看 hazelcast 高密度内存存储选项,以便能够在没有 GC 的情况下将大量数据存储在商品硬件中问题。
以下链接应该会给您进一步的想法:
关于spring-boot - 中型数据项目需要选择哪个分布式数据库,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53376435/