Protocol Buffers

Материал из Википедии — свободной энциклопедии
Перейти к: навигация, поиск
Protocol Buffers
Тип

формат сериализации данных

Операционная система

Любая ОС

Первый выпуск

2008-07-07

Аппаратная платформа

Cross-platform

Последняя версия

2.6.0 (25 августа 2014)

Состояние

Действующий

Лицензия

BSD

Сайт

developers.google.com/protocol-buffers/

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

Общие сведения[править | править вики-текст]

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

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

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

  • Проще
  • От 3 до 10 раз меньше
  • От 20 до 100 раз быстрее
  • Более однозначный
  • Позволяет создавать классы, которые в дальнейшем легче использовать программно

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, Swift, OCaml, Perl, PHP, Python, Ruby, Scala, Visual Basic, Delphi[4].

Примечания[править | править вики-текст]

Ссылки[править | править вики-текст]