SlideShare a Scribd company logo
1 of 13
Download to read offline
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	
  раз	
  меньше)	
  
                          	
  База	
  в	
  1	
  триллион	
  твитов	
  
15	
  

10	
  
                                                                         Size	
  (Petabyte)	
  
  5	
  

  0	
  
                    XML	
                                GPB	
  
 	
  Минусы	
  GPB	
  
•  Отсутствие	
  наследования	
  
•  Отсутствие	
  возможности	
  изменять	
  
   объекты	
  
Спасибо	
  за	
  
внимание!	
  
 Вопросы?	
  
           kdombrovsky@gmail.com

More Related Content

What's hot

Мои инструменты
Мои инструментыМои инструменты
Мои инструментыIvan Golodov
 
Serge P Nekoval Grails
Serge P  Nekoval  GrailsSerge P  Nekoval  Grails
Serge P Nekoval Grailsguest092df8
 
Опыт внедрения Docker .
 Опыт внедрения Docker .  Опыт внедрения Docker .
Опыт внедрения Docker . phpfriendsclub
 
Rempl — крутая платформа для крутых инструментов - Роман Дворнов (Avito)
Rempl — крутая платформа для крутых инструментов - Роман Дворнов (Avito)Rempl — крутая платформа для крутых инструментов - Роман Дворнов (Avito)
Rempl — крутая платформа для крутых инструментов - Роман Дворнов (Avito)AvitoTech
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовYandex
 
Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
Go в продакшене Яндекса: отчёт после года использования — Вячеслав БахмутовGo в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
Go в продакшене Яндекса: отчёт после года использования — Вячеслав БахмутовYandex
 
Shytikov on git Magic
Shytikov on git MagicShytikov on git Magic
Shytikov on git Magicshytikov
 
Ильшад Хабибуллин — BlueBream
Ильшад Хабибуллин — BlueBreamИльшад Хабибуллин — BlueBream
Ильшад Хабибуллин — BlueBreamYury Yurevich
 
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...Yandex
 
Сравнение технологий aiopg & asyncpg, Алексей Фирсов. 22 июня, 2019
Сравнение технологий aiopg & asyncpg, Алексей Фирсов. 22 июня, 2019Сравнение технологий aiopg & asyncpg, Алексей Фирсов. 22 июня, 2019
Сравнение технологий aiopg & asyncpg, Алексей Фирсов. 22 июня, 2019Mail.ru Group
 

What's hot (11)

Мои инструменты
Мои инструментыМои инструменты
Мои инструменты
 
Serge P Nekoval Grails
Serge P  Nekoval  GrailsSerge P  Nekoval  Grails
Serge P Nekoval Grails
 
Опыт внедрения Docker .
 Опыт внедрения Docker .  Опыт внедрения Docker .
Опыт внедрения Docker .
 
Rempl — крутая платформа для крутых инструментов - Роман Дворнов (Avito)
Rempl — крутая платформа для крутых инструментов - Роман Дворнов (Avito)Rempl — крутая платформа для крутых инструментов - Роман Дворнов (Avito)
Rempl — крутая платформа для крутых инструментов - Роман Дворнов (Avito)
 
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав БахмутовПлюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
Плюсы и минусы Go для разработчиков на C++, Вячеслав Бахмутов
 
Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
Go в продакшене Яндекса: отчёт после года использования — Вячеслав БахмутовGo в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
Go в продакшене Яндекса: отчёт после года использования — Вячеслав Бахмутов
 
Shytikov on git Magic
Shytikov on git MagicShytikov on git Magic
Shytikov on git Magic
 
Ильшад Хабибуллин — BlueBream
Ильшад Хабибуллин — BlueBreamИльшад Хабибуллин — BlueBream
Ильшад Хабибуллин — BlueBream
 
Golang
GolangGolang
Golang
 
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
Илья Биин: Организация совместной работы Go и Python-based сервисов в Ostrovo...
 
Сравнение технологий aiopg & asyncpg, Алексей Фирсов. 22 июня, 2019
Сравнение технологий aiopg & asyncpg, Алексей Фирсов. 22 июня, 2019Сравнение технологий aiopg & asyncpg, Алексей Фирсов. 22 июня, 2019
Сравнение технологий aiopg & asyncpg, Алексей Фирсов. 22 июня, 2019
 

Viewers also liked

разработка игр на движке Cosos2d
разработка игр на движке Cosos2dразработка игр на движке Cosos2d
разработка игр на движке Cosos2dciklum_ods
 
Методы и средства обработки географической информации
Методы и средства обработки географической информацииМетоды и средства обработки географической информации
Методы и средства обработки географической информацииciklum_ods
 
Java: tools & techniques for TDD
Java: tools & techniques for TDDJava: tools & techniques for TDD
Java: tools & techniques for TDDAgileee
 
Bring the fun back to java
Bring the fun back to javaBring the fun back to java
Bring the fun back to javaciklum_ods
 
Unit testing and junit
Unit testing and junitUnit testing and junit
Unit testing and junitÖmer Taşkın
 
Rapid java backend and api development for mobile devices
Rapid java backend and api development for mobile devicesRapid java backend and api development for mobile devices
Rapid java backend and api development for mobile devicesciklum_ods
 
Bibelens tilblivelse
Bibelens tilblivelseBibelens tilblivelse
Bibelens tilblivelseakaosloinfo
 
Pesentation on world aids day
Pesentation on world aids dayPesentation on world aids day
Pesentation on world aids dayMohsin Anayat Ch
 
2013 05 17_aprimu li uecchi_passeggino_rosso
2013 05 17_aprimu li uecchi_passeggino_rosso2013 05 17_aprimu li uecchi_passeggino_rosso
2013 05 17_aprimu li uecchi_passeggino_rossoPaola Muti
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerLuminary Labs
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsLinkedIn
 

Viewers also liked (13)

разработка игр на движке Cosos2d
разработка игр на движке Cosos2dразработка игр на движке Cosos2d
разработка игр на движке Cosos2d
 
Методы и средства обработки географической информации
Методы и средства обработки географической информацииМетоды и средства обработки географической информации
Методы и средства обработки географической информации
 
Java: tools & techniques for TDD
Java: tools & techniques for TDDJava: tools & techniques for TDD
Java: tools & techniques for TDD
 
Bring the fun back to java
Bring the fun back to javaBring the fun back to java
Bring the fun back to java
 
Unit testing and junit
Unit testing and junitUnit testing and junit
Unit testing and junit
 
Rapid java backend and api development for mobile devices
Rapid java backend and api development for mobile devicesRapid java backend and api development for mobile devices
Rapid java backend and api development for mobile devices
 
Presentazione ".sTRit" FEST #0
Presentazione ".sTRit" FEST #0Presentazione ".sTRit" FEST #0
Presentazione ".sTRit" FEST #0
 
Bibelens tilblivelse
Bibelens tilblivelseBibelens tilblivelse
Bibelens tilblivelse
 
Pesentation on world aids day
Pesentation on world aids dayPesentation on world aids day
Pesentation on world aids day
 
2013 05 17_aprimu li uecchi_passeggino_rosso
2013 05 17_aprimu li uecchi_passeggino_rosso2013 05 17_aprimu li uecchi_passeggino_rosso
2013 05 17_aprimu li uecchi_passeggino_rosso
 
dont forget the lyrics.
dont forget the lyrics.dont forget the lyrics.
dont forget the lyrics.
 
Hype vs. Reality: The AI Explainer
Hype vs. Reality: The AI ExplainerHype vs. Reality: The AI Explainer
Hype vs. Reality: The AI Explainer
 
Study: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving CarsStudy: The Future of VR, AR and Self-Driving Cars
Study: The Future of VR, AR and Self-Driving Cars
 

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

Feature toggles в процессе подбора, Алексей Ульенков СберТех
Feature toggles в процессе подбора, Алексей Ульенков СберТехFeature toggles в процессе подбора, Алексей Ульенков СберТех
Feature toggles в процессе подбора, Алексей Ульенков СберТехСбертех | SberTech
 
Robot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораRobot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораSQALab
 
Сервис-провайдинг как инструмент развития бизнеса. А.Альбин.
Сервис-провайдинг как инструмент развития бизнеса. А.Альбин. Сервис-провайдинг как инструмент развития бизнеса. А.Альбин.
Сервис-провайдинг как инструмент развития бизнеса. А.Альбин. Clouds NN
 
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...CodeFest
 
рентабельный код
рентабельный кодрентабельный код
рентабельный кодMax Arshinov
 
MyBatis и Hibernate на одном проекте. Как подружить?
MyBatis и Hibernate на одном проекте. Как подружить?MyBatis и Hibernate на одном проекте. Как подружить?
MyBatis и Hibernate на одном проекте. Как подружить?Alexey Zinoviev
 
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!CodeFest
 
Как жить в согласии с SOLID?
Как жить в согласии с SOLID?Как жить в согласии с SOLID?
Как жить в согласии с SOLID?etyumentcev
 
Советы для начинающих разработчиков PostgreSQL
Советы для начинающих разработчиков PostgreSQL Советы для начинающих разработчиков PostgreSQL
Советы для начинающих разработчиков PostgreSQL Anastasia Lubennikova
 
GDG meetup #15: Как построить релиз-инжиниринг на Jenkins
GDG meetup #15: Как построить релиз-инжиниринг на JenkinsGDG meetup #15: Как построить релиз-инжиниринг на Jenkins
GDG meetup #15: Как построить релиз-инжиниринг на JenkinsMikhail Chinkov
 
Well-executed architecture decisions for game backend on Unity
Well-executed architecture decisions for game backend on UnityWell-executed architecture decisions for game backend on Unity
Well-executed architecture decisions for game backend on UnityDevGAMM Conference
 
2014.12.06 02 Екатерина Боброва — Тестируем сложные backend-ы
2014.12.06 02 Екатерина Боброва — Тестируем сложные backend-ы2014.12.06 02 Екатерина Боброва — Тестируем сложные backend-ы
2014.12.06 02 Екатерина Боброва — Тестируем сложные backend-ыHappyDev
 
Повышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииCEE-SEC(R)
 
Артем Титаренко
Артем ТитаренкоАртем Титаренко
Артем ТитаренкоCodeFest
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)Alexander Gornik
 
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)Ontico
 
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...Nikolay Samokhvalov
 
Евгений Дубовик, Senior Developer, DataArtDb presentation gdg
Евгений Дубовик, Senior Developer, DataArtDb presentation gdgЕвгений Дубовик, Senior Developer, DataArtDb presentation gdg
Евгений Дубовик, Senior Developer, DataArtDb presentation gdgAlina Vilk
 
Test Driven Development in .NET Applications
Test Driven Development in .NET ApplicationsTest Driven Development in .NET Applications
Test Driven Development in .NET ApplicationsAnton Vidishchev
 

Similar to Google protocol buffers в мобильных проектах (20)

Feature toggles в процессе подбора, Алексей Ульенков СберТех
Feature toggles в процессе подбора, Алексей Ульенков СберТехFeature toggles в процессе подбора, Алексей Ульенков СберТех
Feature toggles в процессе подбора, Алексей Ульенков СберТех
 
Robot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатораRobot Framework: универсальный инструмент автоматизатора
Robot Framework: универсальный инструмент автоматизатора
 
Sivko
SivkoSivko
Sivko
 
Сервис-провайдинг как инструмент развития бизнеса. А.Альбин.
Сервис-провайдинг как инструмент развития бизнеса. А.Альбин. Сервис-провайдинг как инструмент развития бизнеса. А.Альбин.
Сервис-провайдинг как инструмент развития бизнеса. А.Альбин.
 
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
CodeFest 2013. Лузин А. — Бэкенд-винегрет: как подружить разные ЯП на ваших с...
 
рентабельный код
рентабельный кодрентабельный код
рентабельный код
 
MyBatis и Hibernate на одном проекте. Как подружить?
MyBatis и Hibernate на одном проекте. Как подружить?MyBatis и Hibernate на одном проекте. Как подружить?
MyBatis и Hibernate на одном проекте. Как подружить?
 
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!
CodeFest 2013. Зиновьев А. — MyBatis & Hibernate, давайте жить дружно!
 
Как жить в согласии с SOLID?
Как жить в согласии с SOLID?Как жить в согласии с SOLID?
Как жить в согласии с SOLID?
 
Советы для начинающих разработчиков PostgreSQL
Советы для начинающих разработчиков PostgreSQL Советы для начинающих разработчиков PostgreSQL
Советы для начинающих разработчиков PostgreSQL
 
GDG meetup #15: Как построить релиз-инжиниринг на Jenkins
GDG meetup #15: Как построить релиз-инжиниринг на JenkinsGDG meetup #15: Как построить релиз-инжиниринг на Jenkins
GDG meetup #15: Как построить релиз-инжиниринг на Jenkins
 
Well-executed architecture decisions for game backend on Unity
Well-executed architecture decisions for game backend on UnityWell-executed architecture decisions for game backend on Unity
Well-executed architecture decisions for game backend on Unity
 
2014.12.06 02 Екатерина Боброва — Тестируем сложные backend-ы
2014.12.06 02 Екатерина Боброва — Тестируем сложные backend-ы2014.12.06 02 Екатерина Боброва — Тестируем сложные backend-ы
2014.12.06 02 Екатерина Боброва — Тестируем сложные backend-ы
 
Повышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документации
 
Артем Титаренко
Артем ТитаренкоАртем Титаренко
Артем Титаренко
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)
 
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
Быстрый рендеринг с DOM шаблонизаторами / Борис Каплуновский (aviasales.ru)
 
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва... Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
 
Евгений Дубовик, Senior Developer, DataArtDb presentation gdg
Евгений Дубовик, Senior Developer, DataArtDb presentation gdgЕвгений Дубовик, Senior Developer, DataArtDb presentation gdg
Евгений Дубовик, Senior Developer, DataArtDb presentation gdg
 
Test Driven Development in .NET Applications
Test Driven Development in .NET ApplicationsTest Driven Development in .NET Applications
Test Driven Development in .NET Applications
 

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

  • 1. Google Protocol Buffers в мобильных проектах Домбровский Константин, Ciklum проект Apsmart
  • 2. Проблемы в клиент- серверных приложениях для мобильных платформ •  Использование XML или JSON •  Необходимость переписывать парсеры для различных платформ •  Необходимость переписывать логические структуры данных •  Скорость парсинга часто оставляет желать лучшего •  Все это уныло чуть менее чем полностью
  • 3. Что такое Google Protocol Buffers? Google Protocol Buffers (GPB) – инструмент для быстрой сериализации и десериализации простых объектов – сообщений, разработанный компанией Google. Код GPB был открыт по лицензии BSD в 2008 году.
  • 4. Причины создания Google Protocol Buffers: •  GPB проще •  GPB быстрей •  Весит меньше •  Удобно использовать
  • 5. Язык  описания     структур  данных   Типы  данных:   •  Сообщения •  Вложенные сообщения •  Скалярные типы (int, string, bool, и.т.д.) •  Enum-ы
  • 6. 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;   }  
  • 7. Подготовка  к  использованию   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!!!
  • 8. Как  использовать  GPB  в   проекте?   Очень  просто!!!  
  • 9. Создание  нового  объекта   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];
  • 10. Сериализация  и   десериализация   Product* product = [builder build]; NSData* serializedData = [product data]; product = [Product parseFromData: serializedData]; Изменение  объекта   Product_Builder* builder = [Product builderWithPrototype: product]; [builder setId: 9000]; product = [builder build];
  • 11.  Плюсы  GPB   •  Простота  использования   •  Скорость  работы  (от  20  до  100  раз   быстрее  чем  XML)   •  Меньший  объём  (от  3  до  10  раз  меньше)    База  в  1  триллион  твитов   15   10   Size  (Petabyte)   5   0   XML   GPB  
  • 12.    Минусы  GPB   •  Отсутствие  наследования   •  Отсутствие  возможности  изменять   объекты  
  • 13. Спасибо  за   внимание!   Вопросы?   kdombrovsky@gmail.com