Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Protocol buffers 如何使用gRPC协议实现不同数据类型的动态自定义字段_Protocol Buffers_Grpc_Proto - Fatal编程技术网

Protocol buffers 如何使用gRPC协议实现不同数据类型的动态自定义字段

Protocol buffers 如何使用gRPC协议实现不同数据类型的动态自定义字段,protocol-buffers,grpc,proto,Protocol Buffers,Grpc,Proto,在gRPC protobuff中寻找解决方案,为多租户应用程序实现不同数据类型的动态字段 此外,根据租户,还可以有任意数量的动态字段 使用proto中的map,我可以为每种数据类型定义不同的map集。是否有任何优化的方法来实现这一点 非常感谢您的帮助。在protobuf中传输动态内容有几种不同的方法。哪一个是理想的取决于您的用例。这些选项是按其活力排序的。动态性较差的选项通常具有更好的性能 在proto3中使用。当您想要存储任意protobuf消息时,这非常有用,并且通常用于提供扩展点。它取代了

在gRPC protobuff中寻找解决方案,为多租户应用程序实现不同数据类型的动态字段

此外,根据租户,还可以有任意数量的动态字段

使用proto中的map,我可以为每种数据类型定义不同的map集。是否有任何优化的方法来实现这一点


非常感谢您的帮助。

在protobuf中传输动态内容有几种不同的方法。哪一个是理想的取决于您的用例。这些选项是按其活力排序的。动态性较差的选项通常具有更好的性能

在proto3中使用。当您想要存储任意protobuf消息时,这非常有用,并且通常用于提供扩展点。它取代了
Any
都有一个子消息及其类型,因此您的应用程序可以在运行时检查它是否理解该类型。如果您的应用程序不知道该类型,那么它可以复制Any,但无法解码其内容
Any
不能直接保存标量类型(如int32),但每个标量都有一个可以替代使用的。因为每个
Any
都将消息的类型作为字符串包含,所以如果您需要大量的小内容消息,它就不太合适了

使用该消息。当您想要存储任意无模式JSON数据时,这非常有用。因为它不需要存储其内容的完整类型,所以一个
持有一个
列表值
数字值
(双倍)将比任何
重复的
更紧凑。但如果模式可用,则包含重复双精度消息的
Any
将比
Value
更紧凑

使用一个包含每个允许类型的。通常需要一种新的消息类型来保存其中一种。如果可以限制模式,但值之间存在关系,例如如果列表中每个值的位置很重要,并且列表中的类型是混合的,则这一点非常有用。这类似于
Value
,但允许您选择自己的类型。虽然在技术上比
Value
更强大,但它通常用于生成更受约束的数据结构。与
相比,它在导线上等于或更紧凑。这需要提前知道所需的类型。示例:
map
,其中
MyValue
为:

消息MyValue{
独一无二的{
int32 int_值=1;
字符串_值=2;
}
}

对每种类型使用单独的字段/集合。对于每种类型,protobuf消息中都可以有一个单独的字段。这就是您正在考虑的方法。这是最紧凑的线路和最有效的内存。您必须提前知道要存储的类型。示例:
map int_值=1;map string_values=2

你所说的“优化”是什么意思?还有其他更好的替代方法吗?