首页 > 解决方案 > Python中具有重复字段的gRPC响应流

问题描述

我目前正在设计一个 API,它应该处理相对较小的消息,但有很多数据条目。有添加、删除和列出存储在数据库中的所有项目的操作。

现在我的问题是:我想在短时间内返回所有条目(最多 500 万)。我认为响应流将是要走的路。

使用重复字段流式传输消息以便能够在一条消息中返回多个条目是否有意义。到目前为止,我还没有看到任何迹象表明这是否更快。

例子:

rpc ListDataSet (ListDataSetRequest) returns (stream ListDataSetResponse);


message ListDataSetResponse {
  string transaction_id = 1;
  repeated Entries entries = 2;
}

在服务器中,我会在每条消息中附加一定数量的条目,并在遍历条目列表以使用生成器时产生消息。

任何建议或提示将不胜感激

标签: pythonstreaminggrpc

解决方案


是的,流式传输包含重复字段的消息是有意义的。

从性能的角度来看,您可能需要考虑对替代方案进行基准测试以向自己证明这一点。

gRPC 缺乏全面的最佳实践,但人们认为较小的消息更好,并且 4MiB 通常被认为是一个好的、名义上的上限。

要考虑的另一件事是,您不仅需要考虑服务器的性能,还需要考虑客户端的性能。

一种更常见的模式 (?) 是对大型结果进行分页并将控制权交给客户端以请求下一页|其他页面。这可能也值得评估。

对于异常“巨大”(未指定)的结果,您可能最好将 gRPC 消息中的引用返回到带外(例如对象存储)对象。


推荐阅读