SlideShare une entreprise Scribd logo
1  sur  67
Télécharger pour lire hors ligne
Сравнение форматов и
библиотек сериализации
Антон Рыжов, Qrator Labs
Задача
Сериализовать данные:
● Без потерь
● Компактно
● Быстро
● Удобно
JSON
✔ Привычно
✔ Удобно
✔ Человекочитаемо
[
  {
    "very": "simple"
  }
]
JSON
✔ Привычно
✔ Удобно
✔ Человекочитаемо
✗ Не компактно
[
  {
    "very": "simple"
  },
  {
    "very": "big"
  }
]
JSON — компактность
7              1 byte (1:1)→
JSON — компактность
7              1 byte (1:1)→
65535          5 bytes (5:2)→
1000 000 000   10 bytes (10:4)→
JSON — компактность
3 / 2   1.5 (3 byte)→
JSON — компактность
3 / 2   1.5 (3 byte)→
1 / 3   0.3333333333333333 (18 bytes)→
JSON — компактность
Hello   "Hello" (+2 bytes)→
JSON — компактность
Hello   "Hello" (+2 bytes)→
     "u0420u0418u0422" (×3)РИТ →
JSON — компактность
Hello   "Hello" (+2 bytes)→
     "u0420u0418u0422" (×3)РИТ →
     " " ( )РИТ → РИТ опция
JSON — компактность
[
  {"userId": 1, "userName": "John Smith"},
  {"userId": 2, "userName": "Jane Dow"}
]
JSON — компактность
[
  {"userId": 1, "userName": "John Smith"},
  {"userId": 2, "userName": "Jane Dow"}
]
JSON — компактность
[
  "keys": ["userId", "userName"],
  "values": [
    [1, "John Smith"],
    [2, "Jane Dow"]
  ]
]
JSON — целостность
dict(1: "foo")   { "1": "foo" }→
JSON — целостность
dict(1: "foo")   { "1": "foo" }→
object = { "type_id": 5 }
types = { "5": "Type name" }
JSON — целостность
Python   JSON:→
{ 1: "foo", "1": "bar" }   ?→
PHP   JSON:→
Array(1=> "foo", "1"=> "bar")   ?→
JSON — целостность
Python   JSON:→
{ 1: "foo", "1": "bar" }   {"1": "bar", "1": "foo"}→
PHP   JSON:→
Array(1=> "foo", "1"=> "bar")   {"1": "bar"}→
JSON — целостность
Python   JSON:→
{ 1: "foo", "1": "bar" }   {"1": "bar", "1": "foo"}→
PHP   → PHP:
Array(1=> "foo", "1"=> "bar")   → Array(1=> "bar")
JSON — binary
{"message": "0KDQmNCiKys="}  +30%
JSON — binary
{"message": "0KDQmNCiKys="}  +30%
{"message_bin": "0KDQmNCiKys="}
{"message": { "type": "bin", "value": "0KDQmNCiKys="}}
Альтернативы
Схема данных Binary Ключи map
BSON ✗ ✓ str
Msgpack ✗ ✓ any
Google Protobuf ✓ ✓ ✗
Apache Thrift ✓ ✓ any
Apache Avro ✓ ✓ str
Зачем схема?
✔Описывает данные
Зачем схема?
✔Описывает данные
✔Уменьшает дублирование
Зачем схема?
✔Описывает данные
✔Уменьшает дублирование
✔Валидирует данные
Зачем схема?
✔Описывает данные
✔Уменьшает дублирование
✔Валидирует данные
✔Приводит типы
Зачем схема?
✔Описывает данные
✔Уменьшает дублирование
✔Валидирует данные
✔Приводит типы
✗ Надо писать
Зачем схема?
✔Описывает данные
✔Уменьшает дублирование
✔Валидирует данные
✔Приводит типы
✗ Надо писать
✗ … а иногда ещё и компилировать
Protobuf
✔ Старое проверенное решение
✔ Разработан Google
✔ Хорошие результаты в тестах в интернете
✔ Хорошая документация
Protobuf
✔ Старое проверенное решение
✔ Разработан Google
✔ Хорошие результаты в тестах в интернете
✔ Хорошая документация
✗ Не всё можно описать
– Список списков, map
Protobuf — схема
message Point {
  required int32 x = 1;
  required int32 y = 2;
}
message PointsList {
  repeated Point points = 1;
}
Thrift
● Более новый формат
● Разработал Facebook, отдал в Apache
● Документация — справочник типов и BNF
● Есть “Thrift: The Missing Guide”
● RPC-клиент/сервер
Thrift — схема
struct PointsList {
    1: required list< list<i32> > points,
}
Apache Avro
● Ещё более новый формат
● Разработан для Apache Hadoop
● Документация на схему — подробная
● Кодогенерации нет
Avro — схема
{
    "namespace": "test.avro",
    "type": "array",
    "items": {
        "type": "array",
        "items": "int"
    }
}
Размер integer: «0»; 1-, 2-, 4-byte
Msgpack
Avro
Protobuf
JSON
Thrift
BSON*
0 2 4 6 8 10 12
Размер float: «0», 2.5, 1/3, 1e9/3
Avro
Protobuf
Msgpack
Thrift
BSON*
JSON
0 2 4 6 8 10 12 14 16 18 20
Размер string: "", "Z"×10, "Я"×10
Msgpack
Avro
Protobuf
JSON
Thrift
BSON*
0 5 10 15 20 25 30 35
Размер string: "Z"×1000, "Я"×1000
Msgpack
Avro
Protobuf
Thrift
BSON*
JSON
0 500 1000 1500 2000 2500
Размер 0, 10 bytes
Avro
Msgpack
Protobuf
Thrift
JSON
BSON*
0 5 10 15 20 25
Размер 1000 bytes
Avro
Msgpack
Protobuf
Thrift
BSON*
JSON
0 200 400 600 800 1000 1200 1400 1600
Размер array [0], [10]
Avro
Msgpack
Protobuf
JSON
Thrift
BSON*
0 5 10 15 20 25
Размер map [0], [10]
Msgpack
Avro
Protobuf*
JSON
BSON
Thrift
0 2 4 6 8 10 12 14 16 18 20
Размер struct vs map
Msgpack
Avro
Protobuf*
BSON
JSON
Thrift
0 20 40 60 80 100 120 140 160 180 200
Топ по размеру
1.Apache Avro
2.Msgpack
3.Google Protobuf
4.Apache Thrift
5.JSON
6.BSON
Методика бенчмарка
Характерные объекты — строки, байты, словари разных
размеров, массивы
Замер времени на сериализацию и десериализацию каждой
библиотекой в python2 и python3
Сравнение данных до и после
Железо:
Intel(R) Xeon(R) CPU E5-2683 v4 @ 2.10GHz
64 Gb RAM
Без схемы
Поддержка Установка Реализация Генерация кода
uJSON 2, 3 pip C-ext ✗
BSON 2, 3 pip Python ✗
Msgpack 2, 3 pip C-ext ✗
Без схемы — затраченное время
msgpack
ujson
json
bson
encode py2.7
decode py2.7
encode py3.5
decode py3.5
Protobuf
Поддержка Установка Реализация Генерация кода
protobuf 2, 2to3 make + pip Python
✓
cprotobuf 3 protobuf + pip C-ext
✓
protobuf3 3 protobuf + pip Python
✓
Protobuf — пример кода protobuf, cprotobuf
data = test_pb2.PointsList(
    points=[
        test_pb2.Point(x=1, y=2),
        test_pb2.Point(x=3, y=4),
    ]
).SerializeToString()
pl = test_pb2.PointsList()
pl.ParseFromString(data)
print(pl.points[0].x)
Protobuf — пример для protobuf3
pl = test_pb2.PointsList()
po = test_pb2.Point()
po.x = 1; po.y = 2
pl.points.append(po)
data = pl.encode_to_bytes()
pl = test_pb2.PointsList()
pl.parse_from_bytes(data)
print(pl.points[0].x)
Protobuf — затраченное время
cprotobuf*
google_proto
protobuf3*
encode py2.7
decode py2.7
encode py3.5
decode py3.5
Thrift
Поддержка Установка Реализация Генерация кода
(apache)
thrift
2 make + pip Python ✓
(facebook)
Thrift
2, 3 ☠nightmare☠ Python ✓
thriftpy 2, 3 pip Cython ✗
thriftrw 2, 3 pip Cython ✗
(Apache) thrift — пример кода
data = serialize(
    test_ttypes.PointsList([(1, 2)])
)
points = deserialize(
    test_ttypes.PointsList(),
    points_list,
).points
print(points[0][0])
(facebook)Thrift, thriftpy, thriftrw
Совместим с (Apache) thrift по API
Thrift — затраченное время
thriftrw
fb_thrift**
apache_thrift*
thriftpy+cython*
thriftpy*
Py2.7 Py3.5
Thrift — затраченное время
thriftrw
fb_thrift**
apache_thrift*
thriftpy+cython*
thriftpy*
encode py2.7
decode py2.7
encode py3.5
decode py3.5
Avro
Поддержка Установка Реализация Генерация кода
(apache)
avro
2, 3
2 pip
3 src
Python ✗
fastavro 2, 3 pip Cython ✗
pyavroc 2, 3 shell + make libavro + wrapper ✗
(Apache) avro — пример упаковки
schema = avro.schema.parse(open('points_list.avsc', 
'r').read())
io_stream = io.BytesIO()
avro.io.DatumWriter(schema).write(
    [(1, 2), (3, 4)],
    avro.io.BinaryEncoder(io_stream),
)
data = io_stream.getvalue()
(Apache) avro — пример распаковки
schema = avro.schema.parse(open('points_list.avsc', 
'r').read())
io_stream = io.BytesIO(data)
points = avro.io.DatumReader(schema).read(
    avro.io.BinaryDecoder(io_stream),
)
print(points[0][0])
fastavro — пример упаковки
schema = json.loads(open('points_list.avsc', 'r').read())
io_stream = io.BytesIO()
fastavro.schemaless_writer(
    io_stream,
    schema,
    [(1, 2), (3, 4)],
)
return io_stream.getvalue()
fastavro — пример распаковки
schema = json.loads(open('points_list.avsc', 'r').read())
io_stream = io.BytesIO(points_list)
points = fastavro.schemaless_reader(
    io_stream,
    schema,
)
print(points[0][0])
pyavroc — пример кода
schema = open('specs/points_list.avsc', 'r').read()
points_writer = _pyavroc.AvroSerializer(schema)
data = points_writer.serialize(
    [(1, 2), (3, 4)],
)
points_reader = _pyavroc.AvroDeserializer(schema)
points = points_reader.deserialize(data)
print(points[0][0])
Avro — затраченное время
pyavroc*
fastavro
avro
encode py2.7
decode py2.7
encode py3.5
decode py3.5
Топ — затраченное время
pyavroc*
msgpack
cprotobuf*
thriftrw
ujson
fastavro
thriftpy+cython*
Py2.7 Py3.5
Общие рекомендации
● Следить за новыми разработками
● Рассматривать альтернативы
● Референсная библиотека — не всегда самая лучшая
● Альтернативные — бывают ещё хуже
● Не верить бенчмаркам в интернете (В том числе
этому)
● Кодогенерация только мешает
Всё
ar@qrator.net
https://github.com/QratorLabs/ritfest2016

Contenu connexe

Tendances

Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Ontico
 
Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)
Ontico
 
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
Ontico
 
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
Ontico
 
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
tfmailru
 

Tendances (20)

Семь тысяч Rps, один go
Семь тысяч Rps, один goСемь тысяч Rps, один go
Семь тысяч Rps, один go
 
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
Доклад Антона Поварова на Tarantool Meetup. "Tarantool в Badoo: хранение исто...
 
Reform: путь к лучшему ORM
Reform: путь к лучшему ORMReform: путь к лучшему ORM
Reform: путь к лучшему ORM
 
Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...Современная операционная система: что надо знать разработчику / Александр Кри...
Современная операционная система: что надо знать разработчику / Александр Кри...
 
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
Использование Tarantool для хранения чатов и лент друзей (Константин Осипов)
 
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
PostgreSQL worst practices / Илья Космодемьянский (Data Egret)
 
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
 
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
Тюним память и сетевой стек в Linux: история перевода высоконагруженных серве...
 
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
 
Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)Хранение данных на виниле / Константин Осипов (tarantool.org)
Хранение данных на виниле / Константин Осипов (tarantool.org)
 
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
В ногу со временем, или как делать upgrade PostgreSQL / Андрей Сальников (Dat...
 
Оптимизации уровня CPU, Андрей Акиньшин (JetBrains)
Оптимизации уровня CPU,  Андрей Акиньшин (JetBrains)Оптимизации уровня CPU,  Андрей Акиньшин (JetBrains)
Оптимизации уровня CPU, Андрей Акиньшин (JetBrains)
 
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
12 вариантов использования Redis — в Tarantool (Александр Календарев, Констан...
 
Fabric для управления серверами
Fabric для управления серверамиFabric для управления серверами
Fabric для управления серверами
 
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
5 способов деплоя PHP-кода в условиях хайлоада / Юрий Насретдинов (Badoo)
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
 
pgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresqlpgconf.ru 2015 avito postgresql
pgconf.ru 2015 avito postgresql
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
 
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
 
Про асинхронное сетевое программирование
Про асинхронное сетевое программированиеПро асинхронное сетевое программирование
Про асинхронное сетевое программирование
 

En vedette

Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
Ontico
 
Испытание поединком PostgreSQL vs MySQL / Александр Чистяков, Даниил Подольский
Испытание поединком PostgreSQL vs MySQL / Александр Чистяков, Даниил Подольский Испытание поединком PostgreSQL vs MySQL / Александр Чистяков, Даниил Подольский
Испытание поединком PostgreSQL vs MySQL / Александр Чистяков, Даниил Подольский
Ontico
 
"Marshroute: удобный и расширяемый роутинг в iOS-приложении" Тимур Юсипов (Av...
"Marshroute: удобный и расширяемый роутинг в iOS-приложении" Тимур Юсипов (Av..."Marshroute: удобный и расширяемый роутинг в iOS-приложении" Тимур Юсипов (Av...
"Marshroute: удобный и расширяемый роутинг в iOS-приложении" Тимур Юсипов (Av...
AvitoTech
 
"Удобный и расширяемый роутинг в iOS-приложении" Тимур Юсипов (Avito)
"Удобный и расширяемый роутинг в iOS-приложении" Тимур  Юсипов (Avito)"Удобный и расширяемый роутинг в iOS-приложении" Тимур  Юсипов (Avito)
"Удобный и расширяемый роутинг в iOS-приложении" Тимур Юсипов (Avito)
AvitoTech
 

En vedette (20)

Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
Чему мы научились, разрабатывая микросервисы / Вадим Мадисон (RuTube)
 
Испытание поединком PostgreSQL vs MySQL / Александр Чистяков, Даниил Подольский
Испытание поединком PostgreSQL vs MySQL / Александр Чистяков, Даниил Подольский Испытание поединком PostgreSQL vs MySQL / Александр Чистяков, Даниил Подольский
Испытание поединком PostgreSQL vs MySQL / Александр Чистяков, Даниил Подольский
 
Troubleshooting PostgreSQL Streaming Replication
Troubleshooting PostgreSQL Streaming ReplicationTroubleshooting PostgreSQL Streaming Replication
Troubleshooting PostgreSQL Streaming Replication
 
PostgreSQL: Advanced features in practice
PostgreSQL: Advanced features in practicePostgreSQL: Advanced features in practice
PostgreSQL: Advanced features in practice
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
 
Angular 2 не так уж и плох... А если задуматься, то и просто хорош / Алексей ...
Angular 2 не так уж и плох... А если задуматься, то и просто хорош / Алексей ...Angular 2 не так уж и плох... А если задуматься, то и просто хорош / Алексей ...
Angular 2 не так уж и плох... А если задуматься, то и просто хорош / Алексей ...
 
"Икскод, джейсон, два скетча" Олег Фролов (Avito)
"Икскод, джейсон, два скетча" Олег Фролов (Avito)"Икскод, джейсон, два скетча" Олег Фролов (Avito)
"Икскод, джейсон, два скетча" Олег Фролов (Avito)
 
"Favicon на стероидах" Александр Амосов (Avito)
"Favicon на стероидах" Александр Амосов (Avito)"Favicon на стероидах" Александр Амосов (Avito)
"Favicon на стероидах" Александр Амосов (Avito)
 
"Опыт миграции между дата-центрами" Сергей Бурладян и Михаил Тюрин (Avito)
"Опыт миграции между дата-центрами" Сергей Бурладян и Михаил Тюрин (Avito)"Опыт миграции между дата-центрами" Сергей Бурладян и Михаил Тюрин (Avito)
"Опыт миграции между дата-центрами" Сергей Бурладян и Михаил Тюрин (Avito)
 
"О некоторых особенностях Objective-C++" Влад Михайленко (Maps.Me)
"О некоторых особенностях Objective-C++" Влад Михайленко (Maps.Me)"О некоторых особенностях Objective-C++" Влад Михайленко (Maps.Me)
"О некоторых особенностях Objective-C++" Влад Михайленко (Maps.Me)
 
"Marshroute: удобный и расширяемый роутинг в iOS-приложении" Тимур Юсипов (Av...
"Marshroute: удобный и расширяемый роутинг в iOS-приложении" Тимур Юсипов (Av..."Marshroute: удобный и расширяемый роутинг в iOS-приложении" Тимур Юсипов (Av...
"Marshroute: удобный и расширяемый роутинг в iOS-приложении" Тимур Юсипов (Av...
 
"Опыт использования Sphinx в Ozon.ru" Игорь Чакрыгин (OZON.RU)
"Опыт использования Sphinx в Ozon.ru" Игорь Чакрыгин (OZON.RU)"Опыт использования Sphinx в Ozon.ru" Игорь Чакрыгин (OZON.RU)
"Опыт использования Sphinx в Ozon.ru" Игорь Чакрыгин (OZON.RU)
 
"Деплой кода процедур" Мурат Кабилов (Avito)
"Деплой кода процедур" Мурат Кабилов (Avito)"Деплой кода процедур" Мурат Кабилов (Avito)
"Деплой кода процедур" Мурат Кабилов (Avito)
 
"Подходы, используемые в разработке iOS-клиента Viber" Кирилл Лашкевич (Viber)
"Подходы, используемые в разработке iOS-клиента Viber" Кирилл Лашкевич (Viber)"Подходы, используемые в разработке iOS-клиента Viber" Кирилл Лашкевич (Viber)
"Подходы, используемые в разработке iOS-клиента Viber" Кирилл Лашкевич (Viber)
 
"Kotlin и rx в android" Дмитрий Воронин (Avito)
"Kotlin и rx в android" Дмитрий Воронин  (Avito)"Kotlin и rx в android" Дмитрий Воронин  (Avito)
"Kotlin и rx в android" Дмитрий Воронин (Avito)
 
"Ускорение сборки большого проекта на Objective-C + Swift" Иван Бондарь (Avito)
"Ускорение сборки большого проекта на Objective-C + Swift" Иван Бондарь (Avito)"Ускорение сборки большого проекта на Objective-C + Swift" Иван Бондарь (Avito)
"Ускорение сборки большого проекта на Objective-C + Swift" Иван Бондарь (Avito)
 
"Удобный и расширяемый роутинг в iOS-приложении" Тимур Юсипов (Avito)
"Удобный и расширяемый роутинг в iOS-приложении" Тимур  Юсипов (Avito)"Удобный и расширяемый роутинг в iOS-приложении" Тимур  Юсипов (Avito)
"Удобный и расширяемый роутинг в iOS-приложении" Тимур Юсипов (Avito)
 
"Basis.js - Production Ready SPA Framework" Сергей Мелюков (Avito)
"Basis.js - Production Ready SPA Framework" Сергей Мелюков (Avito)"Basis.js - Production Ready SPA Framework" Сергей Мелюков (Avito)
"Basis.js - Production Ready SPA Framework" Сергей Мелюков (Avito)
 
"Опыт участия в Microsoft Malware Classification Challenge" Михаил Трофимов ...
"Опыт участия в Microsoft Malware Classification Challenge"  Михаил Трофимов ..."Опыт участия в Microsoft Malware Classification Challenge"  Михаил Трофимов ...
"Опыт участия в Microsoft Malware Classification Challenge" Михаил Трофимов ...
 
"Быстрое внедрение Sphinx на примере проекта Фоксфорд.Учебник" Антон Ковалёв ...
"Быстрое внедрение Sphinx на примере проекта Фоксфорд.Учебник" Антон Ковалёв ..."Быстрое внедрение Sphinx на примере проекта Фоксфорд.Учебник" Антон Ковалёв ...
"Быстрое внедрение Sphinx на примере проекта Фоксфорд.Учебник" Антон Ковалёв ...
 

Similaire à Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)

ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3
it-people
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Platonov Sergey
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
it-people
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
Computer Science Club
 
Язык параллельного программирования Cray Chapel
Язык параллельного программирования Cray ChapelЯзык параллельного программирования Cray Chapel
Язык параллельного программирования Cray Chapel
Mikhail Kurnosov
 

Similaire à Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs) (20)

ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3ekbpy'2012 - Михаил Коробов - Python 3
ekbpy'2012 - Михаил Коробов - Python 3
 
Принципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-StudioПринципы работы статического анализатора кода PVS-Studio
Принципы работы статического анализатора кода PVS-Studio
 
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
Евгений Крутько — Опыт внедрения технологий параллельных вычислений для повыш...
 
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)Семинар 5. Многопоточное программирование на OpenMP (часть 5)
Семинар 5. Многопоточное программирование на OpenMP (часть 5)
 
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
Евгений Рыжков, Андрей Карпов Как потратить 10 лет на разработку анализатора ...
 
Олег Бартунов и Иван Панченко
Олег Бартунов и Иван ПанченкоОлег Бартунов и Иван Панченко
Олег Бартунов и Иван Панченко
 
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
Руслан Гроховецкий "Как Python стал делать погоду в Яндексе"
 
Python и Cython
Python и CythonPython и Cython
Python и Cython
 
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
«Память и Python. Что надо знать для счастья?» Алексей Кузьмин, ЦНС
 
Haskell Lite - presentation for DevDay about Haskell language
Haskell Lite - presentation for DevDay about Haskell languageHaskell Lite - presentation for DevDay about Haskell language
Haskell Lite - presentation for DevDay about Haskell language
 
Haskell
HaskellHaskell
Haskell
 
Мир Python функционалим с помощью библиотек
Мир Python  функционалим с помощью библиотекМир Python  функционалим с помощью библиотек
Мир Python функционалим с помощью библиотек
 
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru GroupКак не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
Как не сделать врагами архитектуру и оптимизацию, Кирилл Березин, Mail.ru Group
 
Управление памятью в GO
Управление памятью в GOУправление памятью в GO
Управление памятью в GO
 
Лекция 1. Начало.
Лекция 1. Начало.Лекция 1. Начало.
Лекция 1. Начало.
 
20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov20130429 dynamic c_c++_program_analysis-alexey_samsonov
20130429 dynamic c_c++_program_analysis-alexey_samsonov
 
Programming c++ (begin-if-else)
Programming c++ (begin-if-else)Programming c++ (begin-if-else)
Programming c++ (begin-if-else)
 
Современный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтеры
 
About Python
About PythonAbout Python
About Python
 
Язык параллельного программирования Cray Chapel
Язык параллельного программирования Cray ChapelЯзык параллельного программирования Cray Chapel
Язык параллельного программирования Cray Chapel
 

Plus de Ontico

Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Ontico
 

Plus de Ontico (20)

One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
One-cloud — система управления дата-центром в Одноклассниках / Олег Анастасье...
 
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)Масштабируя DNS / Артем Гавриченков (Qrator Labs)
Масштабируя DNS / Артем Гавриченков (Qrator Labs)
 
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
Создание BigData-платформы для ФГУП Почта России / Андрей Бащенко (Luxoft)
 
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
Готовим тестовое окружение, или сколько тестовых инстансов вам нужно / Алекса...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
PostgreSQL Configuration for Humans / Alvaro Hernandez (OnGres)
 
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
Inexpensive Datamasking for MySQL with ProxySQL — Data Anonymization for Deve...
 
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
Опыт разработки модуля межсетевого экранирования для MySQL / Олег Брославский...
 
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
ProxySQL Use Case Scenarios / Alkin Tezuysal (Percona)
 
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)MySQL Replication — Advanced Features / Петр Зайцев (Percona)
MySQL Replication — Advanced Features / Петр Зайцев (Percona)
 
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
Внутренний open-source. Как разрабатывать мобильное приложение большим количе...
 
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
Подробно о том, как Causal Consistency реализовано в MongoDB / Михаил Тюленев...
 
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
Балансировка на скорости проводов. Без ASIC, без ограничений. Решения NFWare ...
 
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
Перехват трафика — мифы и реальность / Евгений Усков (Qrator Labs)
 
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
И тогда наверняка вдруг запляшут облака! / Алексей Сушков (ПЕТЕР-СЕРВИС)
 
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
Как мы заставили Druid работать в Одноклассниках / Юрий Невиницин (OK.RU)
 
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
Разгоняем ASP.NET Core / Илья Вербицкий (WebStoating s.r.o.)
 
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...100500 способов кэширования в Oracle Database или как достичь максимальной ск...
100500 способов кэширования в Oracle Database или как достичь максимальной ск...
 
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
Apache Ignite Persistence: зачем Persistence для In-Memory, и как он работает...
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 

Сравнение форматов и библиотек сериализации / Антон Рыжов (Qrator Labs)