中型数据项目需要选择哪个分布式数据库

Which distributed database I need to choose for medium data project

现在我们在 spring boot 2 上有 java 带有 PostgreSQL 数据库的项目,带有 Spring Data JPA (Hibernate)。

对新架构的要求: 在 N 台计算机上,我们有工作场所。每个工作场所都使用具有不同配置的相同程序(为重新分配的数据库配置客户端)。 电脑数量并不大——10/20 台电脑。数据库必须是可扩展的(大量数据可以存储在磁盘上~1/2 Tb)。 每天可以从一个工作场所向数据库中插入多达 100 万行数据。 每个工作场所都使用重新分配的数据库——这意味着每个节点必须能够 read/write 数据,相互修改。并根据数据做出一些决定,在运行时由另一个工作场所修改(事务性)。 数据存储(磁盘数据库存档)必须能够存档并复制为备份快照。 项目必须可移植到具有 Spring Data JPA 2 和 liquibase 数据库备份的新架构。适用于 windows/Linux.

快速概览告诉我,目前最流行的重新分发的免费数据库是: 1)Redis 2)阿帕奇点燃 3) 淡褐色

我需要帮助来理解构建所述系统的方法。 首先,我尝试使用 redis 和 ignite。 Redis 很容易启动——但它的工作方式就像简单的 IMDG(在内存数据网格中)。但我需要将所有数据存储在持久性数据库中(在磁盘上,如 ignite persistence)。有没有办法将 redis 与现有的 PostgreSQL 数据库一起使用? Postgres 与所有节点同步,Redis 在内存缓存中使用每个工作场所生成的新数据。每 10 分钟数据在磁盘上刷新一次。 1)这可能吗?怎么样?

我也尝试使用 Ignite - 但我的项目在 spring 启动 2 上工作。Spring 数据 2。Ignite 最后发布的版本是 2.6 和 spring 数据 2支持只会出现在 apache ignite 2.7 中! 2) 我必须下载 2.7 版本的 nightly build,但如何在我的项目中使用它? (需要安装到本地 Maven 存储库?)

3) 毕竟,在那种情况下最好的架构是什么?数据存储提供程序将持久数据存储在磁盘上,与每个工作空间同步内存缓存并在超时时将内存数据持久保存到磁盘? 最好的解决方案是什么,我应该选择哪个数据库? (可能某些东西适用于现有的 PostgreSQL?)

谢谢)

您的用例听起来很像 Hazelcast 的常见用例。您可以将数据存储在内存中(即在 Hazelcast IMap 中),使用 MapStore/MapLoader 来保存对数据库的更改,或从数据库中读取。持久化更改可以根据您的配置以直写或后写方式完成。还有 spring 引导和 spring-jpa 集成可用。

此外,对于 10-20 台机器,您要存储的数据量相当大,因此您可能需要查看 hazelcast 高密度内存存储选项,以便能够在商品硬件中存储大量数据,而无需有 GC 问题。

以下链接应该会给您进一步的想法:

Ignite 不适合该选项,因为 JPA 1 仅支持。 Redis 不支持 SQL 查询。 我们的选择是普通的 PostgreSQL master 和 slave replication。可能 cockroachDB 也适用。 感谢帮助))