ManagedCode.Orleans.Graph 用于在基于 Orleans 的 .NET 应用中引入图导向的关系建模、边管理与遍历逻辑。
用途 当系统存在真正的图问题时适用,例如节点到节点的关系、有向或无向边、遍历查询。若数据本质上是表格或层级结构,应优先使用标准 Orleans grain 模式,而非图抽象。
安装 使用以下命令安装库: dotnet add package ManagedCode.Orleans.Graph
主要能力
- 将图实体建模为 grain:节点映射到 grain 标识,边表示 grain 之间的关系,遍历操作跨 grain 边界查询。
- 提供图 grain 接口模式,支持边的添加、邻居查询、边存在性判断与移除。示例接口定义如下:
public interface IGraphGrain : IGrainWithStringKey { Task AddEdge(string targetId, string edgeType); Task<IReadOnlyList<string>> GetNeighbors(string edgeType); Task<bool> HasEdge(string targetId, string edgeType); Task RemoveEdge(string targetId, string edgeType); }
- 支持多跳遍历逻辑。以下为跨 grain 的广度优先遍历示例:
public async Task<IReadOnlyList<string>> TraverseAsync( IGrainFactory grainFactory, string startId, string edgeType, int maxDepth) { var visited = new HashSet<string>(); var queue = new Queue<(string Id, int Depth)>(); queue.Enqueue((startId, 0));
while (queue.Count > 0)
{
var (currentId, depth) = queue.Dequeue();
if (!visited.Add(currentId) || depth >= maxDepth) continue;
var grain = grainFactory.GetGrain<IGraphGrain>(currentId);
var neighbors = await grain.GetNeighbors(edgeType);
foreach (var neighbor in neighbors)
queue.Enqueue((neighbor, depth + 1));
}
return visited.ToList();
}
使用方式与 Orleans 运行时注意点
- grain 标识决定节点标识。
- 持久化提供程序存储边状态。
- grain 激活生命周期会影响遍历延迟。
- 遍历与关系操作应针对真实 Orleans 集群验证,而不仅是使用 mock grain 工厂的单元测试。
处理流程 图请求到达后,解析节点 grain,从 grain 状态查询边;若需要遍历,则进行多跳 grain 调用,最后聚合结果;若不需要遍历,直接返回直接邻居。
交付内容
- 关于何时使用 Orleans.Graph 抽象、何时使用标准 grain 模式的明确指导。
- 带边管理的图 grain 接口模式。
- 符合 Orleans 分布式执行特性的遍历实现。
- 对真实图流程的验证预期。
验证要点
- 确认应用存在真正的图问题,而非通用关系型问题。
- 图集成不应混淆 grain 标识与遍历关注点。
- 边持久化应配置正确的 Orleans 存储提供程序。
- 遍历操作应针对真实 Orleans 集群测试,而不仅是 mock。
- 多跳查询应设置深度上限,防止 grain 激活失控。
适用场景 需要以 grain 为基础表达节点间关系、有向/无向边或跨 grain 多跳遍历的分布式 .NET 应用。
限制 资料未提供收费、价格、平台或具体存储提供程序配置细节;上述内容以资料所述为准,未提及的功能与步骤暂未提供。