如何在将 Riak 数据输入发送给客户端之前对其进行预处理

How to pre-process Riak data entry before sending it to a client

我有一个包含许多节点的 Riak 安装。它存储条目,在值端具有相对较大的 blob。在某些情况下,客户端只需要此数据的一个子集,因此无需通过网络传输它们。

在实际将数据发送到客户端之前,是否有任何优雅的解决方案可以在服务器端预处理这些数据。

我唯一的想法是在每个节点上安装一个小的 "agent",它将以自己的协议与客户端交互并充当代理,这将根据查询减少数据。

但这种解决方案只有在我可以知道(基于密钥)特定条目存储在哪个节点上时才有效。有办法吗?

如果您指定单个 bucket/key 作为输入,您也许可以使用 MapReduce 做到这一点。 map 函数将 运行 本地存储数据,并将其结果发送到从客户端接收请求的任何节点上的 reduce 函数。由于您提供了一个特定的密钥,因此不应该有任何覆盖折叠,这是导致文档警告的重负载的原因。

这意味着您的请求将有效地使用 r=1,因此如果出现中断,您将得到一些错误的未找到结果。