java - Redis、Mongo 还是 Hazelcast?

标签 java mongodb redis hazelcast

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

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

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

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

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

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

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

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

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

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

编辑 - 我做了什么

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

最佳答案

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

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

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

Replica SetsSharding

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

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

希望有所帮助,干杯。

关于java - Redis、Mongo 还是 Hazelcast?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8788270/

相关文章:

java - 在通过测试访问数据库时,我得到 play.exceptions.JPAException : The JPA context is not initialized

mongodb - 如何将mongodb不同或聚合结果存储到文件中

node.js - 如何在 mongodb 中聚合使用 $match 作为可选参数

ubuntu - 解决 EC2 上 Ubuntu 16.04 的 overcommit_memory 和 Transparent Huge Pages 上的 Redis 警告

javafx动画循环

java - 将 2 个集合转换为 Map

mongodb - 使用 Golang 和 MGO 创建一个返回 mongo 集合的函数

java - 从 Redis 数据库转换为 java 中的日期

node.js - 带有 kue 的 NodeJS 应用程序从不从 0 开始

java - 如何将对象数组添加到列表中