Protocol Buffers – свободный язык описания сообщений и данных, предложенный Google, как эффективная двоичная альтернатива текстовому формату XML. Разработчики сообщают, что Protocol Buffers проще, компактнее и быстрее чем XML.
По замыслу разработчиков сначала должна быть описана структура данных, которая затем компилируется в классы. Вместе с классами идёт код их сериализации в компактный формат представления. Чтение и запись данных доступна в высокоуровневых языках программирования – таких как Java, C++ или Python.
В 2010 году бэкенд Twitter перешёл на Protocol Buffers. По заявлению разработчиков Twitter, база в триллион твитов на XML занимала бы десять петабайт вместо одного.
По заявлениям Google, Protocol Buffers по сравнению с XML:
Protocol Buffers не предназначен для чтения пользователем и представляет собой двоичный формат. Для десериализации данных необходим отдельный .proto-файл, в котором определяется формат сообщения.
Для того, чтобы определить структуру сериализуемых данных, необходимо создать .proto-файл с исходным кодом этой структуры. После того, как файл с нужной структурой данных создан, необходимо скомпилировать его компилятором для вашего языка программирования, чтобы сгенерировать класс доступа к этим данным. Этот класс будет содержать простейшие методы доступа ко всем полям типа get и set, а также методы для сериализации и десериализации вашей структуры данных в или из массива байтов.
Примечательно, что можно добавлять к уже созданной структуре данных новые поля без потери совместимости с предыдущей версией: при парсинге старых записей новые поля просто будут игнорироваться.
На данный момент компанией Google созданы компиляторы для языков программирования C++, Java и Python. Но существует ряд проектов сторонних разработчиков, которые создали компиляторы для следующих языков программирования: ActionScript, C, C#, Clojure, Common Lisp, D, Erlang, Go, Haskell, Haxe, JavaScript, Lua for Windows, MATLAB, Mercury, Objective-C, Swift, OCaml (Objective Caml), Perl, PHP, Python, Ruby, Scala, Microsoft Visual Basic, Delphi.
Ссылки