google protocol buffers в мобильных проектах

13
Google Protocol Buffers в мобильных проектах Домбровский Константин, Ciklum проект Apsmart

Upload: ciklumods

Post on 12-Jul-2015

1.280 views

Category:

Documents


3 download

TRANSCRIPT

Google Protocol Buffers в мобильных

проектах

Домбровский Константин, Ciklum проект Apsmart

Проблемы в клиент-серверных приложениях для мобильных платформ

•  Использование XML или JSON

•  Необходимость переписывать парсеры для различных платформ

•  Необходимость переписывать логические структуры данных

•  Скорость парсинга часто оставляет желать лучшего

•  Все это уныло чуть менее чем полностью

Что такое Google Protocol Buffers?

Google Protocol Buffers (GPB) – инструмент

для быстрой сериализации и десериализации

простых объектов – сообщений, разработанный

компанией Google.

Код GPB был открыт по лицензии BSD в

2008 году.

Причины создания Google Protocol Buffers:

•  GPB проще

•  GPB быстрей

•  Весит меньше

•  Удобно использовать

Язык  описания    структур  данных  

•  Сообщения

•  Вложенные сообщения

•  Скалярные типы (int, string, bool, и.т.д.)

•  Enum-ы

Типы  данных:  

message  Product  {  

 required  string  name    =  1;    required  int32  id              =  2;    optional  int32  price            =  3;    optional  bool  starred    =  4;  

     enum  OrderStatus  {Ordered  =  0;  Shipped  =  1;  Idle        =  2;}    optional  OrderStatus  status  =  5;        message  ProductReview    {      required  int32  id                          =  1;      optional  string  reviewer    =  2;      optional  string  review            =  3;      required  in32  rating                      =  4;    }    repeated  ProductReview  reviews  =  6;  

}  

Подготовка  к  использованию  GPB  в  проекте  

•  Скачиваем исходники GPB для нужного языка •  Компилируем исходники (Придется покрасноглазить 5-10 мин.) •  С помощью компилятора protoc компилируем файл с

объявлениями сообщений protoc  -­‐-­‐proto_path=src  -­‐-­‐objc_out=build/gen  src/shop.proto  

•  Подключаем получившиеся файлы Shop.pb.h и Shop.pb.m и ProtocolBuffers.h к проекту

•  Подключаем проект ProtocolBuffers.xcodeproj к нашему проекту как прямую зависимость

•  ??? •  PROFIT!!!

Как  использовать  GPB  в  проекте?  

Очень  просто!!!  

Создание  нового  объекта  

Product_Builder* builder = [Product builder];[builder setId: 0];[builder setName: @"BMW M5"];[builder setStatus: Product_OrderStatusShipped];Product_ProductReview_Builder* reviewBuilder = [Product_ProductReview builder];[reviewBuilder setId: 0];[reviewBuilder setReviewer: @"Kostia Dombrovsky"];[reviewBuilder setRating: 5];[reviewBuilder setReview: @"Every BMW rocks!"];[builder addReviews: [reviewBuilder build]];Product* product = [builder build];

Сериализация  и  десериализация  

Product* product = [builder build];NSData* serializedData = [product data];product = [Product parseFromData: serializedData];

Product_Builder* builder = [Product builderWithPrototype: product];[builder setId: 9000];product = [builder build];

Изменение  объекта  

 Плюсы  GPB  •  Простота  использования  •  Скорость  работы  (от  20  до  100  раз  

быстрее  чем  XML)  

•  Меньший  объём  (от  3  до  10  раз  меньше)  

0  

5  

10  

15  

XML   GPB  

 База  в  1  триллион  твитов  

Size  (Petabyte)  

   Минусы  GPB  •  Отсутствие  наследования  •  Отсутствие  возможности  изменять  объекты  

Спасибо  за  внимание!  Вопросы?  

[email protected]