2009-12-09 115 views
1

这是一个体系结构问题。 我有一个拥有巨大内存的服务器,用作大对象缓存持有者的想法。客户发送“动作”到这个服务器(像搜索人物,年龄< 13)。然后,这台机器(使事情复杂化,让这个服务器更多的实例以及为每个实例分发Persons列表来保存一半的数据,并且这两个实例都可以在查询 - MapReduce样式上工作)然后返回符合条件的人员。 其他“动作”将是一个特定的缓存刷新,或者说“更新人员id = 3以实例...”等。实现缓存服务器的体系结构问题

猜猜这是Oracle Coherence的最佳做法,但我想知道是否有人有其他开源解决方案或想法。

一个简单的解决方案是将EhCache与Hibernate结合使用,但我不知道用什么协议将它变成服务器(我将发送操作作为“服务器”上的调用方法发送,而方法返回与查询匹配的人员列表)。也许可以使用简单的RMI。我还没有确信,我想要一个更经过验证的解决方案,一个框架,同时拥有故障转移,自动发现和映射减少功能也不错。我想我可以在我的EhCache解决方案上封装GridGain并解决这个问题?这将是矫枉过正的(我可以坚持只有一个这个数据网格服务器的实例)。

其他选项将是兵马俑。关键是我对Terracotta了解不多,只是你可以在实例之间共享数据。如果我将流程中的元素添加到分布式缓存中,并且在另一个流程中存在缓存的本地副本,并且只有差异被复制?这对于每个进程都会查询本地缓存并且速度非常快的事实都很好,但这也意味着客户端进程中使用的内存很多。

那么有人有什么想法?

谢谢。

回答

1

由于简单的解决方案,以一个简单的Ehcache,我想我可以使用Hazelcast实现集群awarness并调用“操作” - Hazelcast

再次MapReduce的能证明趣味性为一体的解决方案。这是非常有趣的,因为他们说他们提供MapReduce并跟踪数据的位置,这应该非常快。如果我们没有两台以上的服务器,我不确定是否可以。

0

我认为Terrastore是为了解决这个问题而设计的,但是对Terrastore的访问意图是没有进程的,而不是进程中的(你并不是特定的需要什么类型的访问)。

Terrastore是基于兵马俑的OSS项目。

1

为什么你需要缓存?您在问题的第一段中描述的内容听起来很像一个关系数据库,其表格完全存储在内存中。您是否有任何可扩展性要求,可能需要将数据分布到集群中的多个服务器上?

0

你也可以看看Redis。它有非常好的查询语言。