对于中等数据项目,我需要选择哪个分布式数据库

时间:2018-11-19 14:09:36

标签: spring-boot redis nosql hazelcast ignite

现在我们有了一个带有Spring Data JPA(休眠)的Spring Boot 2上的带有PostgreSQL数据库的Java项目。

对新体系结构的要求: 在N台计算机上,我们有工作场所。每个工作场所使用具有不同配置的同一程序(用于重新分发数据库的配置客户端)。 电脑数量不多-数量为10/20台电脑。数据库必须具有可伸缩性(可以将大量数据存储在约1/2 Tb的磁盘上)。 每天可以从一个工作场所将多达一百万行插入数据库。 每个工作场所都使用重新分配的数据库-这意味着每个节点必须能够读取/写入彼此修改的数据。并根据数据做出决策,并在运行时由另一个工作场所修改(Transactional)。 数据存储(磁盘数据库存档)必须能够存档并复制为备份快照。 必须使用Spring Data JPA 2将项目移植到新架构,并使用liquibase移植数据库。在Windows / Linux上运行。

快速概述告诉我,目前最受欢迎的重新分发的FREE数据库是: 1)Redis 2)Apache Ignite 3)Hazelcast

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

我也尝试使用Ignite-但我的项目在spring boot 2上运行。Spring data2。而Ignite的最新发行版本是2.6,而spring data 2支持仅在apache ignite 2.7中出现! 2)我必须每晚下载2.7版本,但是如何在我的项目中使用它? (需要安装到本地Maven存储库吗?)

3)毕竟,在那种情况下最好的架构是什么?数据存储提供程序将持久性数据存储在磁盘上,并与每个工作区的内存缓存同步,并通过超时将内存中的数据持久化到磁盘吗? 什么是最佳解决方案,我应该选择哪个数据库? (可能对现有的PostgreSQL有用吗?)

Thx)

2 个答案:

答案 0 :(得分:0)

您的用例听起来像是Hazelcast的常见案例。您可以将数据存储在内存中(即在Hazelcast IMap中),使用MapStore / MapLoader将更改持久保存到数据库或从数据库中读取。可以根据您的配置以直写或后写方式进行持久更改。还提供了spring boot和spring-jpa集成。

此外,您要存储的数据量对于10到20台计算机而言非常大,因此您可能需要考虑使用hazelcast高密度内存存储选项,以便能够在没有GC的情况下在商品硬件中存储大量数据问题。

以下链接应为您提供进一步的思路:

答案 1 :(得分:0)

Ignite不适合该选项,因为JPA 1仅支持。 Redis不支持SQL查询。 我们的选择是带有从属复制的普通PostgreSQL主数据库。可能是cockroachDB也适用。 感谢帮助))