4

我正在读《春天食谱》这本书。我无法理解关于兵马俑的某些说法。

以下是书中的一段话

Terracotta 与今天的大多数集群缓存不同,因为它没有可见的 API,而且它在将更改的状态传送到集群中的节点方面效率更高。大多数系统使用某种 Java 序列化或广播机制,其中每个其他节点都被赋予整个对象或对象图,这些对象或对象图已更改,无论它们是否需要了解新状态。Terracotta 的做法不同:它对对象图本身的内存进行增量,并同步集群中的其他节点,因为它们需要对象状态的一致视图。简而言之,它可以做的事情相当于只传输一个对象中的一个更新变量,而不是整个对象。

我可以理解它不使用序列化之类的东西来跨集群传输对象,但是“它增量内存”是什么意思?

4

2 回答 2

2

值得一提的是,这本书已被弃用,并且不是当今大多数人使用 Terracotta 的方式(人们使用 express 模式,这是基于“用户类型”的序列化)。

无论如何,试图回答你的问题:Terracotta 为你的类提供工具,所以所有必要的关于字段突变和锁定的钩子都在那里,所以所做的更改(在适当的锁定下)将首先传播到 L2(又名 Terracotta 服务器) ; 其次,对于试图读取这些字段的节点。

我希望这个(非常快速和简短的)答案能稍微回答你的问题。

于 2011-11-21T20:58:17.760 回答
2

正如 axtavt 所评论的,Delta本质上是一个对象的两个实例之间的差异。

...它增加了对象图的内存...

可以用更简单的术语重述,例如...

它确定对象实例之间的差异

这段话的本质是……

其他缓存框架/技术通过在节点之间发送消息来同步集群中多个节点的对象状态,这些消息包含有关每个实例的每条信息,甚至是未更改的数据。Terracotta 通过仅发送已更改的信息以同步对象来更有效地处理此问题。

把它想象成一个 SVN 提交。当您将文件提交到 SVN 存储库时,您的计算机不会将整个文件发送到服务器,它只会发送 diff(或 delta)以将文件的存储库版本与本地副本同步。

希望这可以帮助!

于 2011-11-21T21:13:42.657 回答