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:
- Проще
- От 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, OCaml, Perl, PHP, Python, Ruby, Scala, Visual Basic, Delphi[4].
Примечания
- ↑ Developer Guide - Protocol Buffers - Google Code
- ↑ Twitter solves its data formatting challenge - Computerworld
- ↑ Developer Guide - Protocol Buffers - Google Code
- ↑ Third-Party Add-ons for Protocol Buffers