C++ c++;-protobuf vs rapidjson数据格式
使用rapidJSON,我能够存储任何类型的数据(rapidJSON支持)作为键的值。我可以用protobuf做吗?如果是,怎么做 我之所以选择protobuf而不是rapidJSON,是因为它的速度(rapidJSON中的键比较实际上是一个“字符串”比较,成本很高)。 或者还有其他选择吗?也许是平板缓冲器 需求是根据int类型键存储任何类型的数据。比常规json更快的序列化/反序列化C++ c++;-protobuf vs rapidjson数据格式,c++,json,protocol-buffers,rapidjson,flatbuffers,C++,Json,Protocol Buffers,Rapidjson,Flatbuffers,使用rapidJSON,我能够存储任何类型的数据(rapidJSON支持)作为键的值。我可以用protobuf做吗?如果是,怎么做 我之所以选择protobuf而不是rapidJSON,是因为它的速度(rapidJSON中的键比较实际上是一个“字符串”比较,成本很高)。 或者还有其他选择吗?也许是平板缓冲器 需求是根据int类型键存储任何类型的数据。比常规json更快的序列化/反序列化 从C++透视图中寻找答案。在原BUFF中,通常有一个固定的契约,预先将给定的键解释为给定的类型,但是:也有扩展
从C++透视图中寻找答案。
在原BUFF中,通常有一个固定的契约,预先将给定的键解释为给定的类型,但是:也有扩展的概念。通过扩展,可以根据字段编号存储任意数据;这适用于任何也可以使用常规API表示的类型
扩展API的便利性和性能依赖于实现,但它应该完全可以从官方C++ API中使用。
关于扩展的关键点是,只有消费者需要理解它们。Protobuf和FlatBuffer都有字典功能(请参阅和字典下的)。但是,这两种方法都有一个大问题,就是不方便将值设置为任意值,因为它们都是由模式定义的,这意味着您必须为值指定实际的类型。您可以通过定义所有可能类型的联合来解决这个问题,但它从来没有JSON那么方便 但是,FlatBuffers有一种专用格式,用于存储没有模式的任何值:。这比JSON快得多,更紧凑,并且使用更少的额外内存来读取(无)
平面缓冲区有能力使用int作为键,但FlexBuffers还没有,因此您可以考虑将FlexBuffer作为一个值存储在一个缓冲区int字典中。 这两种格式都从JSON解析并输出到JSON,即使是嵌套的
无法就地修改FlexBuffers。FlatBuffers可以使用其对象API。因此,嵌套也可以很好地工作,只要您确定在它发生变化时重新生成整个FlexBuffer值 值得一提的最后一种选择是使用std::map
(或unordered_map
)直接存储FlexBuffers的映射。这很简单,但现在的问题是没有一个方便的方法来存储整个东西