Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java Redis,Mongo还是Hazelcast?_Java_Mongodb_Redis_Hazelcast - Fatal编程技术网

Java Redis,Mongo还是Hazelcast?

Java Redis,Mongo还是Hazelcast?,java,mongodb,redis,hazelcast,Java,Mongodb,Redis,Hazelcast,我们有一个JAVA web应用程序,它使用postgres(带从数据库的单个数据库)存储所有重要数据 我们现在正从单服务器设置转向多服务器设置,因此我需要进行一些更改以满足新的需求 1) 用于负载平衡和分区容差的非粘性会话ID 2) 可从所有web服务器访问的频繁读取数据的缓存(内存/Memcache替代方案) 3) 队列(通过集群执行的电子邮件、SMS、任务)。通常,所有这些都必须通过xml api或屏幕抓取执行。 避免重复处理任务很重要,但有时也会发生:-) 4) API请求和响应的持久存储

我们有一个JAVA web应用程序,它使用postgres(带从数据库的单个数据库)存储所有重要数据

我们现在正从单服务器设置转向多服务器设置,因此我需要进行一些更改以满足新的需求

1) 用于负载平衡和分区容差的非粘性会话ID

2) 可从所有web服务器访问的频繁读取数据的缓存(内存/Memcache替代方案)

3) 队列(通过集群执行的电子邮件、SMS、任务)。通常,所有这些都必须通过xml api或屏幕抓取执行。
避免重复处理任务很重要,但有时也会发生:-)

4) API请求和响应的持久存储(大量XML、大量行但少量列)。(可能通过删除旧的请求和响应来存档,以保持数据集较小)

5) 登录到一个普通的地方。桌子将继续增长。此外,我还需要一个工具来访问生产日志而不停止它们。应该可以根据时间和/或搜索字符串进行某种搜索

我想要一个单一的解决方案来满足所有这些需求,并将redis、mongo和hazelcast(按我个人偏好的顺序)视为可能的替代方案

其他重要考虑: 1) 减少对代码的入侵。 2) 简单的备份/复制策略。至少是主从。 3) 可管理性、社区性和经过尝试和测试(在生产中运行)

哪一个能够执行全部或大部分功能和需求

编辑-我做了什么

  • Redis支持的tomact会话管理器
  • 用于缓存的Redis
  • 由redis支持的Jesque(Respue的java版本)
  • 博士后
  • 由Log4j2支持的SLF4J

  • 我可以从MongoDB的角度解决其中一些问题

    我注意到的第一件事是,您正在从单服务器设置转移到多服务器设置。MongoDB使复制和分片的设置变得非常容易。反过来,复制和分片,以及Mongo的一些其他功能,可以帮助您实现很多您要做的事情

    首先,先看一下文档,了解一下:

    根据您的要求,还有一些其他想法:

    • 与使用不同数据存储的其他扩展方法相比 mongo使用商品硬件水平扩展的方法是 设置、缩放和维护非常简单。这意味着你可以花钱 更多时间用于构建应用程序,而不是成为DBA
    • 如果使用mongo,还可以跳过缓存层。 MongoDB使用内存映射文件,这意味着如果您的工作集 可以保存在物理内存中,基本上你有一个内存缓存 已经
    • MongoDB非常适合于日志记录。用户通常不需要保险箱 为这类应用程序编写,因此如果您坚持使用默认的fire-and-forget模型进行编写,那么性能将非常好
    • 这是否意味着它将更少地侵入您的代码是有争议的,然而,与典型的对象关系映射器相比,Mongo对您的数据的侵入性要小得多。它能够以自然可用状态存储数据,即对象

    希望这有帮助,干杯。

    我想说的是使用sql。因为您需要关系数据库已经完善多年的一切。据我所知,您希望数据解决方案不是用于“特定”目的(NOSQL正试图涵盖这一点),而是用于“一体式”场景。这就是SQL的用途


    如果您想从您正在命名的3个数据库中进行选择,Mongodb将是最接近的数据存储,但是:使用sql

    没错,Redis将解决前3个需求-非粘性会话、缓存和队列

    至于集中式日志记录,这不是一个简单的用例,但可以在Redis上完成,下面是一个示例,说明了如何实现。注意,NoSQL专家Alex Popescu对中的方法提出了一些保留意见


    至于持久性,这里是对的Redis.io的概述-有一些问题,但可行。

    到目前为止,我对分布式数据库不感兴趣。当我们需要扩大规模时,Mongo似乎更像是一个未来的postgres竞争对手。