scala – Haxl和Stitch中的并发数据访问

这是我之前的
question的后续行动.

据我所知,从HaxlStitch他们使用monad进行数据访问. monad实际上是一个数据访问命令树.子节点是节点所依赖的命令.兄弟姐妹同时被执行.

业务逻辑创建monad,然后单独的函数fetch解释它.

现在,问题是:假设我正在同时执行一些数据访问操作.我可以使用一个applicative functor(不是monad),它只是一个命令列表(不是树).

是否有意义 ?如果列表包含重复命令怎么办?

最佳答案 我认为通过构造Fetch值,可以避免重复相同查询的可能性,即使在同一轮查询中(当你说它们是“兄弟姐妹”时).如果你看一下这篇论文,图4解释了dataFetch的实现,它是Fetch值的构造函数.它有三种可能性:

>之前从未提出过请求
>请求已在之前完成并且已完成
>该请求之前已经提出,但尚未完成

在最后一种情况下,您会注意到返回的值具有空的BlockedRequests序列,因为在这种情况下,其他一些Blocked fetch具有它.这样,当使用此值调用ap函数时,它不会连接相同的重复请求.

顺便说一下,我一直在尝试在Scala here中实现Haxl.

点赞