Redis,Mongo还是Hazelcast?

gla*_*tor 10 java mongodb redis hazelcast

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

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

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

2)可从所有Web服务器访问的频繁读取数据的缓存(在Memory/Memcache备选中).

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

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

5)登录到一个公共场所.该表将继续增长.此外,我需要一个工具来访问生产日志而不停止它们.根据时间和/或搜索字符串,应该可以进行某种搜索.

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

其他重要注意事项:1)减少对代码的干扰.2)简单的备份/复制策略.至少大师奴隶.3)可管理性,社区和经过试验和测试(在生产中运行).

哪个能够执行所有或大部分功能和要求?

编辑 - 我做了什么

  1. Redis支持tomact的会话管理器.
  2. Redis用于缓存
  3. 由redis支持的Jesque(Respue的java版本).
  4. Postgres的
  5. 由Log4j2支持的SLF4J

Tyl*_*ock 4

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

我注意到的第一件事是您正在从单服务器设置转向多服务器设置。MongoDB 让设置复制和分片变得异常简单。反过来,复制和分片以及 Mongo 的一些其他功能可以帮助您实现很多目标。

首先,看一下文档来感受一下:

副本集分片

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

  • 与使用不同数据存储进行扩展的其他方法相比,mongo 使用商用硬件进行水平扩展的方法非常易于设置、扩展和维护。这意味着您可以花更多的时间来构建应用程序,而不是成为一名 DBA。
  • 如果您使用 mongo,您还可以跳过缓存层。MongoDB 使用内存映射文件,这意味着如果您的工作集可以保存在物理内存中,那么您基本上已经拥有了内存缓存。
  • MongoDB 非常适合日志记录。用户通常不需要对此类应用程序进行安全写入,因此如果您坚持使用默认的“即发即忘”模型进行写入,性能将非常出色。
  • 这是否意味着它会更少地侵入您的代码还有待争论,但是,与典型的对象关系映射器所做的相比,Mongo 对您的数据的侵入要小得多。它能够以自然可用状态(对象)存储数据!

希望有帮助,干杯。