0

我正在评估 GridGain 并且已经阅读并重新阅读了我能找到的所有文档。虽然其中大部分内容非常详尽,但您可以看出它主要是由开发人员编写的。如果有一本以局外人的视角写的参考书就好了。

无论如何,我有五个基本问题希望来自 GridGain 的人可以为我回答和澄清。

  1. 据我了解,GridCacheQueue(和其他分布式数据结构)是建立在 GridCache 实现之上的。这是否意味着 GridCacheQueue 的每个元素实际上只是 GridCache 映射的一个 GridCacheElement,或者每个 GridCacheQueue 都是一个 GridCacheElement,还是我完全错了?
  2. 如果我在 GridCache 上设置默认 TTL,GridCacheQueue 的元素会在 TTL 时间内过期,还是仅适用于 GridCacheElements(可能在上面的#1 中回答)?
  3. 有没有办法让 GridCacheQueue 在一段时间后过期而不必手动删除它?
  4. 如果将缓存设置为备份到其他节点并且缓存使用堆外内存和/或交换存储,那么堆外内存和/或交换存储是否也复制到备份节点上?
  5. 是否可以动态创建新的缓存,还是只能在创建节点时通过配置创建?

感谢您提供任何有见地的信息!

-科林

4

2 回答 2

0

首先让我说 GridGain 支持几个队列配置参数:

  • 托管与非托管。在托管模式下,您可以有许多队列。每个队列都将分配给某个网格节点,并且该队列中的所有数据都将缓存在该网格节点上。这样,如果您有许多队列,每个队列可能会缓存在不同的节点上,但队列本身应该均匀分布在所有节点上。另一方面,非托管模式适用于较大的队列,其中同一队列的数据在多个节点之间进行分区。
  • 容量 - 此参数定义最大队列容量。当队列达到此容量时,它将自动开始驱逐最旧的元素。

现在,让我尝试解决其中的一些问题。

  1. 我相信 GridCacheQuery 的每个元素都是缓存中的一个单独元素,但实现将它们标记为内部元素。这就是为什么在遍历缓存时看不到这些元素的原因。
  2. TTL 不应与队列中的元素一起使用(GridGain 将很快添加此功能)。现在,您应该通过在创建时指定队列“容量”来限制队列的最大大小。
  3. 我不这么认为,但我认为正在添加此功能。现在,您可以尝试使用 org.gridgain.grid.schedule.GridScheduler 来安排稍后将删除队列的作业。
  4. 答案是肯定的。堆外和交换空间中的数据都以与主堆上缓存数据相同的方式进行备份和复制。
  5. 应该在配置中从代码或 XML 中创建缓存。然而,GridGain 有一个很酷的 GridCacheProjection 概念,它允许在同一个缓存上创建各种子缓存(缓存视图)。例如,如果您将 Person 和 Organization 类存储在同一个缓存中,那么您可以在使用 Person 类时使用 Person 类型的缓存投影,在使用 Organization 类时可以使用 Organization 类型的缓存投影。
于 2014-03-19T01:31:03.287 回答
0

在尝试了 GridCache 和 GridCacheQueue 之后,以下是我对 5 个问题的了解:

  1. 我不知道 GridCacheQueue 或其元素如何附加到 GridCache,但我知道 GridCacheQueue 的元素不会显示为 GridCache 的 GridCacheElements。
  2. 如果在 GridCache 上设置 TTL 并向其添加 GridCacheQueue,则一旦 GridCache 的元素开始过期,GridCacheQueue 将变得不可用,并将导致抛出 GridRuntimeException。
  3. 是的,请参见上面的#2。但是,一旦 GridCache 的元素开始过期,似乎没有一种安全的方法来测试队列是否仍然存在。
  4. 目前还没有这方面的信息。真的很想得到一些反馈。
  5. 这是一个我不应该问的问题。GridCache 可以完全用代码创建和配置。
于 2014-03-16T01:39:39.233 回答