Protocol Buffers | это... Что такое Protocol Buffers? (original) (raw)

Protocol Buffers

Тип формат сериализации данных
Операционная система Любая ОС
Первый выпуск 7 июля 2008
Аппаратная платформа Cross-platform
Последняя версия 2.4.0 (2 февраля 2011)
Состояние Действующий
Лицензия BSD
Сайт http://code.google.com/apis/protocolbuffers/

Protocol Buffers — язык описания данных, предложенный Google[1], как альтернатива XML. Предполагается, что Protocol Buffers проще и легче, чем XML.

Общие сведения

По замыслу разработчиков сначала должна быть описана структура данных, которая затем компилируется в классы, представляющие эти структуры. Вместе с классами идет код их сериализации в компактный формат представления. В дальнейшем используя высокоуровневые языки программирования такие как Java, C++ или Python осуществляется чтение и запись данных.

Недавно бэкенд Twitter перешёл на Protocol Buffers. По заявлению разработчиков Twitter, база в триллион твитов на XML занимала десять петабайт вместо одного.[2]

По заявлениям Google, Protocol Buffers по сравнению с XML:

Protocol Buffers не предназначен для чтения пользователем. Для десериализации данных, необходим отдельный .proto-файл, в котором определяется формат сообщения.

Примеры использования

Для того, чтобы определить структуру сериализуемых данных необходимо создать .proto-файл с исходным кодом этой структуры. Ниже приведен пример .proto-файла для описания информации о машине: марка, тип кузова, цвет, год выпуска и информация о предыдущих владельцах.

message Car { required string model = 1;

enum BodyType { sedan = 0; hatchback = 1; SUV = 2; }

required BodyType type = 2 [default = sedan]; optional string color = 3; required int32 year = 4;

message Owner { required string name = 1; required string lastName = 2; required int64 driverLicense = 3; }

repeated Owner previousOwner = 5; }

После того, как файл с нужной структурой данных создан, необходимо скомпилировать его компилятором для вашего языка программирования, чтобы сгенерировать класс доступа к этим данным. Этот класс будет содержать простейшие методы доступа ко всем полям типа get/set, а также методы для сериализации и десериализации вашей структуры данных в/из массива байтов.

Примечательно, что можно добавлять к уже созданной структуре данных новые поля не боясь утратить совместимость с предыдущей версией: при парсинге старых записей новые поля просто будут игнорироваться.

Реализация

На данный момент компанией Google созданы компиляторы для языков программирования C++, Java и Python[3]. Но существует ряд проектов сторонних разработчиков, которые создали компиляторы для следующих языков программирования: Action Script, C, C#, Clojure, Common Lisp, D, Erlang, Go, Haskell, JavaScript, Lua, Matlab, Mercury, Objective C, OCaml, Perl, PHP, Python, Ruby, Scala, Visual Basic, Delphi[4].

Примечания

  1. Developer Guide - Protocol Buffers - Google Code
  2. Twitter solves its data formatting challenge - Computerworld
  3. Developer Guide - Protocol Buffers - Google Code
  4. Third-Party Add-ons for Protocol Buffers

Ссылки