为什么 parent 的名称用作 Akka 分片中 PersistenceId 的一部分?
Why is the parent's name used as part of the PersistenceId in Akka Sharding?
我正在查看分片 example 并注意到 parent 的名称用作 PersistenceId 的一部分?
PersistenceId = Context.Parent.Path.Name + "-" + Self.Path.Name;
我的问题:
parent的名字是ShardId吗?
使用它的目的是什么?它的作用像复合键吗?
我的 EntityId 是一个 guid,我的 MessageExtractor 继承自 HashCodeMessageExtractor class。由于这将为我提供基于 PersistenceId/Guid 的一致的 ShardId 哈希,我是否仍需要使用 parent 的名称作为 PersistenceId 的一部分?此外,同一 guid 的哈希值是否会根据不同的构造函数值 (maxNumberOfShards) 而变化?
此示例特定于 Akka.Cluster.Sharding。在由集群分片扩展管理时,分片参与者(称为实体)仍然位于标准的 akka 参与者层次结构树下。它看起来或多或少是这样的:
- ShardRegion (名称=类型名称)
- 分片(名称=shardId)
- 实体(名称=entityId)
虽然您的 actor 是此树中的实体部分,但其余部分由 Akka.Cluster.Sharding 插件创建。
另一部分是在集群中定位实体的方法。为此 Akka.Cluster.Sharding 使用形式为 (shardId,entityId) 的组合键。总是。
- 在某些情况下——比如您提到的使用
HashCodeMessageExtractor
时——shardId 是 generated/computed 仅基于 entityId。在那种情况下,您不需要在任何地方包含它,entityId 就足够了。使用 HashCodeMessageExtractor
的缺点是您必须预先提供最大分片数:脑死亡规则是使用 10 * max-number-of-nodes 您期望永远在你的集群中。
- 其他场景可能需要两个ID来唯一标识一个实体。这是示例中的情况,因此我们查找 shardId(通过查看我提供的层次结构,它以父名称编码)以组成 persistentId。
您可以找到有关构建分片 ID 的更多详细信息 here。
我正在查看分片 example 并注意到 parent 的名称用作 PersistenceId 的一部分?
PersistenceId = Context.Parent.Path.Name + "-" + Self.Path.Name;
我的问题:
parent的名字是ShardId吗?
使用它的目的是什么?它的作用像复合键吗?
我的 EntityId 是一个 guid,我的 MessageExtractor 继承自 HashCodeMessageExtractor class。由于这将为我提供基于 PersistenceId/Guid 的一致的 ShardId 哈希,我是否仍需要使用 parent 的名称作为 PersistenceId 的一部分?此外,同一 guid 的哈希值是否会根据不同的构造函数值 (maxNumberOfShards) 而变化?
此示例特定于 Akka.Cluster.Sharding。在由集群分片扩展管理时,分片参与者(称为实体)仍然位于标准的 akka 参与者层次结构树下。它看起来或多或少是这样的:
- ShardRegion (名称=类型名称)
- 分片(名称=shardId)
- 实体(名称=entityId)
- 分片(名称=shardId)
虽然您的 actor 是此树中的实体部分,但其余部分由 Akka.Cluster.Sharding 插件创建。
另一部分是在集群中定位实体的方法。为此 Akka.Cluster.Sharding 使用形式为 (shardId,entityId) 的组合键。总是。
- 在某些情况下——比如您提到的使用
HashCodeMessageExtractor
时——shardId 是 generated/computed 仅基于 entityId。在那种情况下,您不需要在任何地方包含它,entityId 就足够了。使用HashCodeMessageExtractor
的缺点是您必须预先提供最大分片数:脑死亡规则是使用 10 * max-number-of-nodes 您期望永远在你的集群中。 - 其他场景可能需要两个ID来唯一标识一个实体。这是示例中的情况,因此我们查找 shardId(通过查看我提供的层次结构,它以父名称编码)以组成 persistentId。
您可以找到有关构建分片 ID 的更多详细信息 here。