Java Redis,Mongo还是Hazelcast?
我们有一个JAVA web应用程序,它使用postgres(带从数据库的单个数据库)存储所有重要数据 我们现在正从单服务器设置转向多服务器设置,因此我需要进行一些更改以满足新的需求 1) 用于负载平衡和分区容差的非粘性会话ID 2) 可从所有web服务器访问的频繁读取数据的缓存(内存/Memcache替代方案) 3) 队列(通过集群执行的电子邮件、SMS、任务)。通常,所有这些都必须通过xml api或屏幕抓取执行。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请求和响应的持久存储
避免重复处理任务很重要,但有时也会发生:-) 4) API请求和响应的持久存储(大量XML、大量行但少量列)。(可能通过删除旧的请求和响应来存档,以保持数据集较小) 5) 登录到一个普通的地方。桌子将继续增长。此外,我还需要一个工具来访问生产日志而不停止它们。应该可以根据时间和/或搜索字符串进行某种搜索 我想要一个单一的解决方案来满足所有这些需求,并将redis、mongo和hazelcast(按我个人偏好的顺序)视为可能的替代方案 其他重要考虑: 1) 减少对代码的入侵。 2) 简单的备份/复制策略。至少是主从。 3) 可管理性、社区性和经过尝试和测试(在生产中运行) 哪一个能够执行全部或大部分功能和需求 编辑-我做了什么
我可以从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竞争对手。