问题描述
在Dgraph paper中,提到实体在服务器之间随机分片,它们与其他实体的关系与自身有关。这会导致图形查询中间步骤的高扇出结果集导致服务器上的广播和执行连接的高延迟。
我不明白这里扇出的含义。
我尝试从基础知识中理解,这就是我发现的:
- 查询中大量的扇出请求会导致网络等问题 拥塞、尾部延迟和 cpu 限制。点击here查看论文。
- 扇入是对调用其他函数或方法(例如 X)的函数或方法数量的度量。扇出是函数 X 调用的函数数。它用作基于调用图的指标。点击 here 获取来源。
我不确定上面的点与 Dgraph 论文中讨论的基于实体的图有何关系。实体与其他实体之间有很多关系,因此一个实体有很多边吗?
解决方法
简而言之:是的,在某些情况下,一个实体可以有很多条边。
在第一篇论文中,分片基于谓词“lives-in”和“eats”。在这个描述中,所有“存在”数据都在一个分片中,所有“吃”数据都在另一个分片中,论文说:“假设最坏的情况是集群如此之大,每个分片都生活在一个单独的服务器。”
现在,考虑一个包含多个谓词的查询,每个谓词都在自己的分片中,每个分片都位于不同的服务器上。
Find any person
that lives-in ???,that eats ???,that drinks ???,that drives ???,that reads ???
随着谓词数量的增加(即被询问的分片的数量),我们看到论文中描述的高扇出。集群“广播”的数量显着增长,导致查询延迟成比例增长。