1

这是一个架构问题。我有这样的想法,即拥有一个具有巨大内存的服务器,用作大对象缓存持有者。客户端将“操作”发送到此服务器(例如属性 age<13 的搜索人员)。然后,这台机器(为了使事情复杂化,最好有更多的服务器实例,并为每个实例分配 Persons 列表以保存一半的数据,并且两个实例都可以处理查询 - MapReduce 样式)然后将返回符合条件的人。其他“操作”将是特定的缓存刷新,或者说“将 id=3 的人员更新到实例 ...”等。

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

一个简单的解决方案是将 EhCache 与 Hibernate 一起使用,但我不知道我将使用什么协议将其转换为服务器(我看到将操作作为“服务器”上的调用方法发送,并且这些方法返回的人员列表匹配查询)。也许可以使用简单的 RMI。我还不相信,我想要一个更成熟的解决方案,一个框架,而且有故障转移,自动发现和地图减少会很好。我想我可以将 GridGain 包裹在我的 EhCache 解决方案之上并解决这个问题?那会不会过分(我可能只坚持这个数据网格服务器的一个实例)。

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

所以有人有任何想法吗?

谢谢你。

4

4 回答 4

1

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

于 2010-05-03T20:47:42.847 回答
1

作为简单 EhCache 的简单解决方案,我想我可以使用 Hazelcast 来实现集群感知并调用“Actions” - Hazelcast

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

于 2009-12-10T09:02:54.063 回答
0

我相信Terrastore是为解决这个问题而构建的,但是对 Terrastore 的访问是在进程之外,而不是在进程中(你没有具体说明你需要什么样的访问)。

Terrastore 是一个基于 Terracotta 的 OSS 项目。

于 2010-01-21T00:11:41.820 回答
0

您也可以查看 Redis。它有很好的查询语言。

于 2011-08-29T08:52:33.237 回答