Redis,Mongo还是Hazelcast?

时间:2012-01-09 12:14:07

标签: java mongodb redis hazelcast

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

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

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

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

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

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

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

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

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

哪些能够执行此功能和要求的全部或大部分内容?

编辑 - 我做了什么

  1. Redis支持tomact的会话管理器。
  2. Redis for caching
  3. Jesis(Respue的java版本)由redis支持。
  4. 的Postgres
  5. 由Log4j2支持的SLF4J

3 个答案:

答案 0 :(得分:4)

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

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

首先,请仔细阅读文档以了解它:

Replica SetsSharding

根据您的要求提出一些其他想法:

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

希望有所帮助,欢呼。

答案 1 :(得分:2)

我会说使用sql。因为您希望关系数据库的所有内容已经完善多年。据我所知,您希望数据解决方案不是出于“特定”目的(这就是NOSQL试图涵盖的内容),而是出于“一体化”方案。这就是SQL的用途。

Mongodb将是最接近的数据存储,如果你想从你命名的那3个中进行选择,但是再次:使用sql

答案 2 :(得分:0)

你是正确的,Redis将解决前3个要求 - 非粘性会话,缓存和队列。

至于集中式日志记录,它不是一个简单的用例,但可以在Redis上完成,这里有blog post解释如何。请注意,NoSQL大师Alex Popescu对this post中的方法提出了一些保留意见。

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