这是一个架构问题。 我有这样一个想法,即拥有一个具有巨大内存的服务器,它被用作一个大对象缓存持有者。客户端向此服务器发送“操作”(如搜索人员,其属性年龄<13)。然后,这台机器(复杂的是,拥有更多这个服务器的实例并为每个实例分配Persons列表以容纳一半数据,并且两个实例都可以在查询上工作 - MapReduce样式)将会很复杂。符合标准的人员。 其他“操作”将是特定的缓存刷新,或者说“将id = 3更新为实例......”等。
猜测它是甲骨文Coherence的最好的事情,但我想知道是否有人有其他开源解决方案或想法。
一个简单的解决方案是将EhCache与Hibernate一起使用,但我不知道我将使用什么协议将其转换为服务器(我看到将操作发送为“服务器”上的调用方法,并且方法返回列表与查询匹配的人员数量。也许可以使用简单的RMI。我还不确定,我想要一个更成熟的解决方案,一个框架,也可以通过故障转移,自动发现和映射减少来实现。我想我可以将GridGain包装在我的EhCache解决方案之上并解决它?这是否有点过分(我可能只关注这个数据网格服务器的一个实例)。
其他选择是兵马俑。事情是我不太了解Terracotta,只是你可以在实例之间共享数据。如果我将进程中的元素添加到分布式缓存中,而在另一个进程中是否存在缓存的本地副本,并且只复制差异?这对于每个进程都会查询本地缓存并且速度非常快这一点非常有用,但它也意味着客户端进程中使用了大量内存。
所以有人有任何想法吗?
谢谢。
答案 0 :(得分:1)
作为简单EhCache的简单解决方案,我想我可以使用Hazelcast来实现群集意识并调用“动作” - Hazelcast
同样,MapReduce可以证明是有趣的解决方案。这非常有趣,因为他们说他们提供MapReduce并跟踪数据的位置,这应该非常快。如果我们没有超过两台服务器,我不确定它是否正常。
答案 1 :(得分:1)
为什么需要缓存?您在问题的第一段中描述的内容听起来很像关系数据库,其表完全存储在内存中。您是否有任何可扩展性要求可能需要在群集中的多个服务器之间分发数据?
答案 2 :(得分:0)
我认为Terrastore是为了解决这个问题而构建的,但是对Terrastore的访问是在进程中,而不是在进行中(你没有具体说明你需要什么样的访问权限。)
Terrastore是一个基于Terracotta的OSS项目。
答案 3 :(得分:0)
您也可以查看Redis。它有很好的查询语言。