我们有一个JAVA网络应用程序,它使用postgres(带有从属的单个数据库)来存储所有重要数据。
我们现在正从单个服务器设置转移到多个服务器,因此我需要进行一些更改以满足新的要求。
1)用于负载平衡和分区容错的非粘性会话ID。
2)可从所有Web服务器访问的频繁读取数据的缓存(在内存/ Memcache备选方案中)。
3)队列(电子邮件,短信,通过群集执行的任务)。通常,所有这些都必须通过xml api或屏幕抓取来执行 避免重复处理任务很重要,但有时可能会发生: - )
4)API请求和响应的持久存储(大量XML,大量行但列数很少)。 (可能通过删除旧请求和响应进行归档以保持数据集较小)。
5)登录到一个公共场所。该表将继续增长。此外,我需要一个工具来访问生产日志而不停止它们。根据时间和/或搜索字符串,应该可以进行某种搜索。
我想要一个解决方案来满足所有这些要求,并将redis,mongo和hazelcast(按照我个人喜好的顺序)作为可能的替代方案。
其他重要考虑因素: 1)减少对代码的干扰。 2)简单的备份/复制策略。至少大师奴隶。 3)可管理性,社区和经过测试(在生产中运行)。
哪些能够执行此功能和要求的全部或大部分内容?
编辑 - 我做了什么
答案 0 :(得分:4)
我可以从MongoDB的角度解决其中一些问题。
我注意到的第一件事是您正在从单个服务器设置转移到多服务器设置。 MongoDB使得设置复制和分片变得异常简单。反过来,复制和分片以及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的概述 - 有一些问题但是可行。