为什么用父母的名字,如阿卡拆分的PersistenceId的一部分?

问题描述 投票:0回答:1

我看着分片example,发现父母的名字被用作PersistenceId的一部分吗?

PersistenceId = Context.Parent.Path.Name + "-" + Self.Path.Name;

我的问题:

  1. 是父母的名字ShardId?
  2. 什么是使用它的目的是什么?它像一个组合键?
  3. 我ENTITYID是一个GUID和我MessageExtractor从HashCodeMessageExtractor类继承。因为这会给我基础上,PersistenceId / GUID的ShardId一致的哈希值,我还需要使用父母的名字作为PersistenceId的一部分吗?另外,确实为根据不同的构造函数值(maxNumberOfShards)相同的GUID的散列值的变化?
akka.net akka-cluster akka-persistence
1个回答
1
投票

这个例子是特定于Akka.Cluster.Sharding。虽然由群集分片扩展进行管理,分片演员(称为实体)仍放置在标准阿卡演员层次树。它看起来或多或少是这样的:

  • ShardRegion(名称=的typeName) 碎片(名称= shardId) 实体(名称= ENTITYID)

当你的演员是实体部分在这棵树上,其余由Akka.Cluster.Sharding插件创建。

另一部分是在集群中的定位实体的一种方式。对于此Akka.Cluster.Sharding使用在(shardId,ENTITYID)的形式的复合密钥。总是。

  1. 在某些情况下 - 使用HashCodeMessageExtractor时一样,你所提到的 - 在shardId是完全基于ENTITYID生成/计算。在你不需要的任何地方包括它的话,ENTITYID就够了。使用HashCodeMessageExtractor的缺点是,你必须预先提供的碎片数量上限:死脑筋的规则是使用10 *您期望不断在你集群最大用户号码的节点 - 。
  2. 其他情况下可能需要两个编号来唯一标识一个实体。这是从的情况为例,由于这个原因,我们做shardId查找(其中通过观察我介绍的层次,在父母的名字编码)撰写成persistentId。

你可以找到关于建设碎片ID here更详细的信息。

© www.soinside.com 2019 - 2024. All rights reserved.