这是一个架构问题。我有这样的想法,即拥有一个具有巨大内存的服务器,用作大对象缓存持有者。客户端将“操作”发送到此服务器(例如属性 age<13 的搜索人员)。然后,这台机器(为了使事情复杂化,最好有更多的服务器实例,并为每个实例分配 Persons 列表以保存一半的数据,并且两个实例都可以处理查询 - MapReduce 样式)然后将返回符合条件的人。其他“操作”将是特定的缓存刷新,或者说“将 id=3 的人员更新到实例 ...”等。
猜猜它做的最好的事情是 Oracle Coherence,但我想知道是否有人有其他开源解决方案或想法。
一个简单的解决方案是将 EhCache 与 Hibernate 一起使用,但我不知道我将使用什么协议将其转换为服务器(我看到将操作作为“服务器”上的调用方法发送,并且这些方法返回的人员列表匹配查询)。也许可以使用简单的 RMI。我还不相信,我想要一个更成熟的解决方案,一个框架,而且有故障转移,自动发现和地图减少会很好。我想我可以将 GridGain 包裹在我的 EhCache 解决方案之上并解决这个问题?那会不会过分(我可能只坚持这个数据网格服务器的一个实例)。
另一个选择是兵马俑。问题是我对 Terracotta 了解不多,只知道您可以在实例之间共享数据。如果我将一个进程中的元素添加到分布式缓存中,并且在另一个进程中是否存在缓存的本地副本,并且仅复制差异?这对于每个进程都会查询本地缓存并且速度非常快的事实非常有用,但这也意味着客户端进程中使用了大量内存。
所以有人有任何想法吗?
谢谢你。