---
title: "转换和转换 Protobuf 数据"
date: "2022-02-10"
categories: 
  - "data-integration"
  - "database"
  - "json"
  - "protocol-buffers"
  - "xml"
tags: 
  - "data-integration"
  - "data-mapping"
  - "flowforce-server"
  - "mapforce"
  - "mapforce-server"
description: 探索如何使用 Altova MapForce 软件高效地映射和转换 Protocol Buffers (Protobuf) 数据，并将其与 XML、JSON 以及数据库集成，从而实现更流畅的数据管理。
---
Status: #blog

Tags:  #data-integration #data-mapping #flowforce-server #mapforce #mapforce-server

Categories: [data-integration](/blog/zh/category/data-integration.md) | [database + sql](/blog/zh/category/database-sql.md) | [json](/blog/zh/category/json.md) | [data-integration](/blog/zh/category/data-integration.md) | [xml](/blog/zh/category/xml.md)
# 转换和转换 Protobuf 数据

MapForce 支持将 Protocol Buffers (Protobuf) 映射到其他结构化数据格式，也可以将其他结构化数据格式映射到 Protobuf，作为[映射的源或目标](https://www.altova.com/zh/mapforce)。 为了不断寻找更高效的方式来传输、处理和管理大型结构化数据集，Google 创建了一种与语言和平台无关的数据格式，它类似于 XML，但比 JSON 数据更小、更快、更简单。 提供了工具，可以使用 Java、Python、C++、C#、Ruby 等编程语言来生成和处理 Protobuf。

任何 Protobuf 消息的结构都定义在一个 .proto 文件中，该文件定义了每个字段的名称和值类型。Altova MapForce 允许用户将这些 .proto 文件作为源或目标，与其他数据一起导入到数据映射中，这些数据包括 XML、JSON、关系数据库、Excel、文本文件、REST 和 SOAP Web 服务等。支持 .proto 文件的版本 2 和 3。

MapForce 数据映射工具能够实现现有 XML、JSON、数据库或其他旧数据格式与采用 Protobuf 技术的全新应用程序之间的兼容性，从而提高效率。

[![](/blog/images/shutterstock_59314045.jpg)](shutterstock_59314045.jpg)

<!--more-->

要开始转换和处理 Protobuf 数据，只需使用“插入”菜单或快速访问工具栏上的按钮，将 .proto 文件插入到映射文件中即可。

[![Altova MapForce 中的数据映射协议缓冲区](/blog/images/insert-new.png)](insert-new.png)

MapForce 包含一个示例 Protobuf 数据映射，如下所示：

[![MapForce中数据映射协议缓冲区示例](/blog/images/protocol-buffers-data-mapping.png)](protocol-buffers-data-mapping.png)

用于输出的目标文件（.proto 文件）与在线文档中描述的“人员联系人列表”示例相匹配。源数据是一个 XML 文件，其中包含许多与此 Protobuf 数据流无关的额外元素。在执行数据映射时，会从 XML 文件中提取必要的元素，以创建输出数据流。

请注意，Protobuf 输出的文件类型为 BLOB，即二进制大型对象。MapForce 允许开发者创建 Protocol Buffer 数据流，或者读取 Protocol Buffer 输入数据，而无需生成 Java、C++ 或其他语言的源代码，然后针对每个 Protobuf 二进制文件，根据新的 .proto 文件进行编译和执行。

### 查看转换后的数据 

点击主界面“MapForce”数据映射窗口底部的“输出”按钮，即可执行数据映射，并将文件 "Altova_Hierarchical.xml" 作为数据源。生成的的数据流将在输出预览窗口中以类似于 JSON 的格式显示：

[![数据映射协议缓冲区输出预览](/blog/images/output-preview.png)](output-preview.png)

对于一次性需求，MapForce 用户可以通过“输出”菜单中的一个选项来保存二进制文件

[![保存由数据映射协议缓冲区生成的二进制输出](/blog/images/data-mapping-save-output.png)](data-mapping-save-output.png)

以下是实际生成的二进制数据的一个片段，以常见的十六进制查看工具显示的格式：

[![从数据映射协议缓冲区生成的二进制输出视图](/blog/images/protocol-buffers-binary-view.png)](protocol-buffers-binary-view.png)

Protobuf 传输流的效率体现在其二进制数据格式中。与 XML 或 JSON 相比，它移除了所有冗余信息，例如元素名称、空格、制表符、括号以及其他通常用于提高可读性的字符。

### 映射和转换 Protobuf 数据 

如果您接收到一个 Protobuf 数据流，您可以将其映射到您企业内部的数据格式。下图展示了如何将其映射到数据库：

[![一种协议缓冲区数据映射方案，其中协议缓冲区（protobuf）作为数据源，目标是数据库表。](/blog/images/protobuf-source-mapping.png)](protobuf-source-mapping.png)

该映射功能使用多种数据处理转换函数，对传入的二进制数据进行处理，使其符合现有数据库表的结构。MapForce支持将数据映射到或从所有主流的关系型数据库和NoSQL数据库。点击此处[查看完整列表](https://www.altova.com/zh/mapforce#db_mapping)。

这个映射过程的输出结果是一个SQL脚本，用于将二进制数据导入到数据库中

[![一个 SQL 脚本，它是将 Protocol Buffers 数据映射到数据库的输出结果。](/blog/images/db-insert-script.png)](db-insert-script.png)

脚本执行完成后，我们可以使用DatabaseSpy（Altova公司出品）来验证数据库的内容 [SQL 编辑器](https://www.altova.com/zh/databasespy):

[![执行 protobuf 到数据库映射后，表的内容如下。](/blog/images/table-contents.png)](table-contents.png)

### 自动化执行

生产流程可能需要[重复执行数据映射](https://www.altova.com/zh/mapforce-server)，以基于相同的.proto定义生成新的数据流，但使用不同的源数据。在上述第一个例子中，可以提供不同的XML实例文档。从数据库或REST Web服务到Protobuf的数据映射可能需要按照定期的时间表执行，以便包含更新后的源数据。

在需要重复执行的此类或其他情况下，MapForce 用户可以通过简单的菜单选项，将数据映射关系保存为 [MapForce Server](https://www.altova.com/zh/mapforce-server) 执行文件：

[![MapForce Server 用于数据映射协议缓冲区的文件](/blog/images/MapForce-Server-execution-file.png)](MapForce-Server-execution-file.png)

执行文件定义了输入、输出，以及必须应用于数据的任何中间处理步骤（包括排序、过滤、自定义函数或其他操作），并将这些操作以一种针对服务器环境优化的形式呈现。MapForce Server 通过命令行或 API 接口，自动执行这些编译后的数据映射。

MapForce Server 也可以根据企业的需求，与 FlowForce Server、RaptorXML Server 或 StyleVision Server 配合使用。当 MapForce Server 在 FlowForce Server 的管理下运行时，数据映射操作会作为 FlowForce Server 的任务步骤执行，这些任务可以按照预定的时间或时间间隔触发，也可以基于事件触发，例如当监视的文件夹中出现新文件时。

对于 Protobuf 数据映射，如果数据源是数据库查询或 REST 请求，则查询会在映射过程中执行。如果输入是文件，例如 JSON 或 XML 文档，则需要在运行时，将该文件指定为 FlowForce 作业的参数。

您现在可以尝试一下，只需要一个 [完全可用的 MapForce 免费试用版](https://www.altova.com/zh/mapforce/download).
