python - Python中具有重复字段的gRPC响应流
问题描述
我目前正在设计一个 API,它应该处理相对较小的消息,但有很多数据条目。有添加、删除和列出存储在数据库中的所有项目的操作。
现在我的问题是:我想在短时间内返回所有条目(最多 500 万)。我认为响应流将是要走的路。
使用重复字段流式传输消息以便能够在一条消息中返回多个条目是否有意义。到目前为止,我还没有看到任何迹象表明这是否更快。
例子:
rpc ListDataSet (ListDataSetRequest) returns (stream ListDataSetResponse);
message ListDataSetResponse {
string transaction_id = 1;
repeated Entries entries = 2;
}
在服务器中,我会在每条消息中附加一定数量的条目,并在遍历条目列表以使用生成器时产生消息。
任何建议或提示将不胜感激
解决方案
是的,流式传输包含重复字段的消息是有意义的。
从性能的角度来看,您可能需要考虑对替代方案进行基准测试以向自己证明这一点。
gRPC 缺乏全面的最佳实践,但人们认为较小的消息更好,并且 4MiB 通常被认为是一个好的、名义上的上限。
要考虑的另一件事是,您不仅需要考虑服务器的性能,还需要考虑客户端的性能。
一种更常见的模式 (?) 是对大型结果进行分页并将控制权交给客户端以请求下一页|其他页面。这可能也值得评估。
对于异常“巨大”(未指定)的结果,您可能最好将 gRPC 消息中的引用返回到带外(例如对象存储)对象。
推荐阅读
- opencv - 使用 cmake 和 opencv 构建“空心世界”错误:未定义对 viz 模块的引用
- python - 如何获取切换标志值和标志切换之间的行总和
- azure - 如何在 Bot framework v4(.net core) 中设置动态瀑布步骤?
- javascript - 在 Parcel 构建期间在 HTML 文件中调用 JavaScript 函数时不会触发
- android - 解决 'org.andengine.opengl.texture.ITexture org.andengine.opengl.texture.region.ITextureRegion.getTexture()' 处的空指针异常
- dropbox - 如何通过 API 使用 Dropbox Paper TODO?
- c++ - 如果不需要 volatile,为什么 std::atomic 方法会提供 volatile 重载?
- reactjs - React.js 自动重定向路由
- jenkins - 对于 Jenkins 用户 Chrome UI 未打开
- xml - 如何使用 PowerShell 编写依赖于文件夹存在的 XML 文件?