SlideShare a Scribd company logo
1 of 27
Download to read offline
Strictly ConfidentialStrictly Confidential
Building data streams
Константин Евтеев
kevteev@avito.ru
2Strictly Confidential 2Strictly Confidential 2
CRUD
read
DBcreate
update
delete
read
read
read
read
read
3Strictly Confidential 3Strictly Confidential 3
1 Оптимизируем процедуры выборки
2 Вертикальное и функциональное масштабирование
3 Вводим в бой стендбаи бинарной репликации
4 Денормализуем данные для чтения
5 Шардирование
6 Денормализованные данные выносим на отдельные машины
Optimization steps
4Strictly Confidential 4Strictly Confidential 4
C(R)UD & R

read
DBcreate
update
delete
read
read
read
read
read
DB-SB
5Strictly Confidential 5Strictly Confidential 5
movies
id
name
length_minutes
rating_id
movie_showtimes
id
movie_id
theatre_id
room
start_time
theatres
id
name
phone_number
purchased_tickets
id
confirmation_code
purchase_price_cents
auditoriums
theatre_id
room
seats_available
orders
confirmation_code
movie_showtime_id
movie_id
theatre_id
auditorium_id
room
start_time
Денормализуем данные для чтения
mat_view
movie_name
movie_rating_id
movie_length_minutes
movie_id,
theatre_id,
room,
start_time,
theatre_name,
seats_availble
...
http://www.slideshare.net/pavlushko/sphinx-10460333
http://www.pgcon.org/2008/schedule/attachments/64_BSDCan2008-MaterializedViews-paper.pdf
http://www.pgcon.org/2008/schedule/attachments/63_BSDCan2008-MaterializedViews.pdf
6Strictly Confidential 6Strictly Confidential 6
It looks like
1 Command and Query Responsibility Segregation (CQRS) или
Command-query separation (CQS)
2 Event Sourcing
3 Eventual consistency
4 Lambda Architecture
5 Kappa Architecture
http://lambda-architecture.net/
http://milinda.pathirage.org/kappa-architecture.com/
7Strictly Confidential 7Strictly Confidential 7
DB
CUD
(CRUD)
mv1
Field1 - fieldN
DB-SB
R DBN-
CUD
(CRUD)
DB-SB
R
mvN
Field1 - fieldN
DB-SB
Rmv1
Field1 - fieldN
DB-RE-01*2
mv2
Field1 - fieldN
mv1
Field1 - fieldN
DB-RE-N*2
mv6
Field1 - fieldN
mv3
Field1 - fieldN
DBN-SB
R
DBN-SB
R
node1 node2
node3 node3
PL/Proxy cluster
dwh
Data streams
8Strictly Confidential 8Strictly Confidential 8
Выгрузка по времени
+ работает
− есть вопросы
9Strictly Confidential 9Strictly Confidential 9
Выгрузка данных batch-ами
Источник Буфер ПриемникТранспорт транспорт
#pg_current_xlog_insert_location() 
#Get current transaction log insert location
master_pos=$(psql_ping_db ­c "select force_wal(pg_current_xlog_insert_location())")
#pg_xlog_location_diff(location text, location text)  numeric 
#Calculate the difference between two transaction log locations
psql ­c "select pg_xlog_location_diff(pg_last_xlog_replay_location(), '${master_pos}')")
https://github.com/eshkinkot/pgday2016/tree/master/ping_DB
1Strictly Confidential 1Strictly Confidential 10
Ticker & pgq
2008 год! https://www.pgcon.org/2008/schedule/attachments/55_pgq.pdf
https://www.postgresql.org/docs/9.4/static/functions-info.html#FUNCTIONS-
TXID-SNAPSHOT
https://github.com/markokr/skytools/tree/skytools_2_1_stable/python
https://github.com/markokr/skytools/blob/skytools_2_1_stable/sql/pgq/functions/pg
q.ticker.sql
http://www.pgcon.org/2009/schedule/attachments/91_pgq.pdf
1Strictly Confidential 1Strictly Confidential 11
MVCC
(https://www.postgresql.org/docs/8.3/static/release-8-3.html)
Add several txid_*() functions to query active transaction IDs (Jan)
This is useful for various replication solutions.
1Strictly Confidential 1Strictly Confidential 12
How to select txids that are between snapshots
xmin1 xmax1
xmax2
xmax1
xmin2
1Strictly Confidential 1Strictly Confidential 13
Все изменения данных под единой блокировкой
объекта(row level)
Item
sCategory
params
values
moderatio
n
doublets
Fee
packages
…
User
sContact
informatio
n
shops,
company
Afraud
payments
…
User lock
Item lock
Payme
nt data
Items
data
Users
data
Под блокировкой понимаем цепочку
блокировок:
select item_id from items for update;
1Strictly Confidential 1Strictly Confidential 14
Сессионные переменные “signal”
1. Достаточно дешево по
ресурсам
2. Не нужно разбирать цепочку
вызовов процедур, и
добавлять
входные/выходные
параметры
Достоинства:
1Strictly Confidential 1Strictly Confidential 15
Сессионные переменные, групповые действия,
подводные камни …
В 1 транзакции может меняться несколько объектов, а событие относится не ко всем.
Решение:Используем массив по unique key array ‘{}’
1Strictly Confidential 1Strictly Confidential 16
Init remote mv or counter
https://www.depesz.com/2016/06/14/incrementing-counters-in-database/
1) Cоздать временную таблицу на стороне подписчика
2) Создать принимающую процедуру
● временную для инициализации
● реальную
3)Начинаем слать события
4)Запускаем инициализацию со стендбая(дождаться прихода
события, с которого начали заполнять временную таблицу)
5)Переключаем на реальную процедуру приема
6)Пересчитываем под блокировкой через очередь
1Strictly Confidential 1Strictly Confidential 17
Init remote mv or counter
items
item_id
user_id
category_id
last_update_txtime
CONSTRAINT TRIGGER 
items_delta
  AFTER INSERT OR UPDATE OR 
DELETE
providerprovider subscriber
pgq
user_items_cnt
user_id
category_id
cnt
date
tmp_user_cnt
user_id
1 save data for recount after init
2 copy
3 switch accept to real table
https://github.com/eshkinkot/pgday2016/tree/master/remote_cnt
1Strictly Confidential 1Strictly Confidential 18
Table and trigger function on provider's side
1Strictly Confidential 1Strictly Confidential 19
Tables on subscriber's side
Accept function
2Strictly Confidential 2Strictly Confidential 20
Provider init function
2Strictly Confidential 2Strictly Confidential 21
Subscriber's init functions
2Strictly Confidential 2Strictly Confidential 22
Maintenance
2Strictly Confidential 2Strictly Confidential 23
Real time sphinx index
Main DB
mat_view_index
Id
field1
….
filedN
DB-RE-IND
mat_view_index
Id
field1
….
filedN
sphinx
londiste
Select full reindex
pgq pgq consumer
2Strictly Confidential 2Strictly Confidential 24
Persistent queue
table1
Id
field1
….
filedN
pgq
Table1 1
Id
field1
….
filedN
tick_id
call_id
Table1 n
Id
field1
….
filedN
tick_id
call_id
Lock
free
rotation
complex
object
tbl 1
Id
field1
….
filedN
tick_id
call_id
complex
object
tbl n
Id
field1
….
filedN
tick_id
call_id
Lock
free
rotation
Complex object
part 1
Id
field1
….
Complex object
part 1
Id
field1
….
Complex object
part 1
Id
field1
….
deferred
trg
deferred
trg
2Strictly Confidential 2Strictly Confidential 25
Особенности согласования данных
Eventual consistency
1 Read with ver num
master
Avito_delta
Client
Avito_delta
reserv
3 (if 2) write due to delay possible
in pgq
pgq
2 consumers
2 write with check version
2Strictly Confidential 2Strictly Confidential 26
Восстановление после аварий
provider
sb
subscriber
provider
undo
provider
subscriber
subscriber
subscriber
1 crash
3 apply undo
2 promote
4 start consumer
3 copy
1 crash
2 stop consumer
4 Add new consumer
5 start consumer
White Gardens Business Center, 7 Lesnaya street, Moscow, 125047, www.avito.ruWhite Gardens Business Center, 7 Lesnaya street, Moscow, 125047, www.avito.ru
Thank you for
your attention!
White Gardens Business Center, 7 Lesnaya street, Moscow, 125047, www.avito.ru
Спасибо за внимание!
Константин Евтеев
kevteev@avito.ru
https://hh.ru/vacancy/10795267
https://hh.ru/vacancy/11463461

More Related Content

What's hot

Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NETPositive Hack Days
 
Применение фреймворка GStreamer в системе видеонаблюдения
Применение фреймворка GStreamer в системе видеонаблюденияПрименение фреймворка GStreamer в системе видеонаблюдения
Применение фреймворка GStreamer в системе видеонаблюденияcorehard_by
 
Суперсилы Chrome DevTools — Роман Сальников, 2ГИС
Суперсилы Chrome DevTools — Роман Сальников, 2ГИССуперсилы Chrome DevTools — Роман Сальников, 2ГИС
Суперсилы Chrome DevTools — Роман Сальников, 2ГИСYandex
 
Как сделать Facebook на Ethereum. Спикер: Александр Ноксон
Как сделать Facebook на Ethereum. Спикер: Александр Ноксон Как сделать Facebook на Ethereum. Спикер: Александр Ноксон
Как сделать Facebook на Ethereum. Спикер: Александр Ноксон Cyber Fund
 
Практическое использование средств криптографии в .NET, Java и PHP
Практическое использование средств криптографии в .NET, Java и PHPПрактическое использование средств криптографии в .NET, Java и PHP
Практическое использование средств криптографии в .NET, Java и PHPVladimir Kochetkov
 
NeoQUEST: Tpm.txt.на что способно заморское железо
NeoQUEST: Tpm.txt.на что способно заморское железоNeoQUEST: Tpm.txt.на что способно заморское железо
NeoQUEST: Tpm.txt.на что способно заморское железоNeo_QUEST
 
Базы данных. Hash & Cache
Базы данных. Hash & CacheБазы данных. Hash & Cache
Базы данных. Hash & CacheVadim Tsesko
 

What's hot (11)

JSQuest d:)
JSQuest   d:)JSQuest   d:)
JSQuest d:)
 
Взломать сайт на ASP.NET
Взломать сайт на ASP.NETВзломать сайт на ASP.NET
Взломать сайт на ASP.NET
 
Жизнь без SDL
Жизнь без SDLЖизнь без SDL
Жизнь без SDL
 
Применение фреймворка GStreamer в системе видеонаблюдения
Применение фреймворка GStreamer в системе видеонаблюденияПрименение фреймворка GStreamer в системе видеонаблюдения
Применение фреймворка GStreamer в системе видеонаблюдения
 
Суперсилы Chrome DevTools — Роман Сальников, 2ГИС
Суперсилы Chrome DevTools — Роман Сальников, 2ГИССуперсилы Chrome DevTools — Роман Сальников, 2ГИС
Суперсилы Chrome DevTools — Роман Сальников, 2ГИС
 
Как сделать Facebook на Ethereum. Спикер: Александр Ноксон
Как сделать Facebook на Ethereum. Спикер: Александр Ноксон Как сделать Facebook на Ethereum. Спикер: Александр Ноксон
Как сделать Facebook на Ethereum. Спикер: Александр Ноксон
 
Практическое использование средств криптографии в .NET, Java и PHP
Практическое использование средств криптографии в .NET, Java и PHPПрактическое использование средств криптографии в .NET, Java и PHP
Практическое использование средств криптографии в .NET, Java и PHP
 
NeoQUEST: Tpm.txt.на что способно заморское железо
NeoQUEST: Tpm.txt.на что способно заморское железоNeoQUEST: Tpm.txt.на что способно заморское железо
NeoQUEST: Tpm.txt.на что способно заморское железо
 
Cassandra
CassandraCassandra
Cassandra
 
Базы данных. Hash & Cache
Базы данных. Hash & CacheБазы данных. Hash & Cache
Базы данных. Hash & Cache
 
Bitcoin Wite paper (ru)
Bitcoin Wite paper (ru)Bitcoin Wite paper (ru)
Bitcoin Wite paper (ru)
 

Viewers also liked

Зачем в Avito Аналитика?
Зачем в Avito Аналитика?Зачем в Avito Аналитика?
Зачем в Avito Аналитика?AvitoTech
 
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013it-people
 
Cоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTargetCоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTargetOleg Tsarev
 
Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...
Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...
Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...odnoklassniki.ru
 
Класс!ная Cassandra
Класс!ная CassandraКласс!ная Cassandra
Класс!ная Cassandraodnoklassniki.ru
 
Рекомендации в Avito - Василий Лексин (Avito)
Рекомендации в Avito - Василий Лексин (Avito)Рекомендации в Avito - Василий Лексин (Avito)
Рекомендации в Avito - Василий Лексин (Avito)AvitoTech
 
За гранью NoSQL: NewSQL на Cassandra
За гранью NoSQL: NewSQL на CassandraЗа гранью NoSQL: NewSQL на Cassandra
За гранью NoSQL: NewSQL на Cassandraodnoklassniki.ru
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015Alex Chistyakov
 
"Опыт участия в Microsoft Malware Classification Challenge" Михаил Трофимов ...
"Опыт участия в Microsoft Malware Classification Challenge"  Михаил Трофимов ..."Опыт участия в Microsoft Malware Classification Challenge"  Михаил Трофимов ...
"Опыт участия в Microsoft Malware Classification Challenge" Михаил Трофимов ...AvitoTech
 
“Атличнаи дивчачьи каньки”: исправляем ошибки. Андрей Смирнов (Avito)
“Атличнаи дивчачьи каньки”: исправляем ошибки. Андрей Смирнов (Avito)“Атличнаи дивчачьи каньки”: исправляем ошибки. Андрей Смирнов (Avito)
“Атличнаи дивчачьи каньки”: исправляем ошибки. Андрей Смирнов (Avito)AvitoTech
 
"Распознавание марки и модели автомашин на изображениях" Евгений Нижибицкий (...
"Распознавание марки и модели автомашин на изображениях" Евгений Нижибицкий (..."Распознавание марки и модели автомашин на изображениях" Евгений Нижибицкий (...
"Распознавание марки и модели автомашин на изображениях" Евгений Нижибицкий (...AvitoTech
 
"DeepLink’и в Avito" Артём Разинов (Avito)
"DeepLink’и в Avito" Артём Разинов (Avito)"DeepLink’и в Avito" Артём Разинов (Avito)
"DeepLink’и в Avito" Артём Разинов (Avito)AvitoTech
 
"Распознавание категории объявления по изображениям" Артур Кузин (МФТИ)
"Распознавание категории объявления по изображениям" Артур Кузин (МФТИ)"Распознавание категории объявления по изображениям" Артур Кузин (МФТИ)
"Распознавание категории объявления по изображениям" Артур Кузин (МФТИ)AvitoTech
 
"Погружение в Robolectric" Дмитрий Костырев (Avito)
"Погружение в Robolectric"  Дмитрий Костырев (Avito)"Погружение в Robolectric"  Дмитрий Костырев (Avito)
"Погружение в Robolectric" Дмитрий Костырев (Avito)AvitoTech
 
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)AvitoTech
 
"Построение рекомендательной системы на Python" Василий Лексин (Avito)
"Построение рекомендательной системы на Python" Василий Лексин (Avito)"Построение рекомендательной системы на Python" Василий Лексин (Avito)
"Построение рекомендательной системы на Python" Василий Лексин (Avito)AvitoTech
 
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?tfmailru
 
"Контекстная реклама в Avito: что под капотом?" Вадим Аюев и Андрей Остапец (...
"Контекстная реклама в Avito: что под капотом?" Вадим Аюев и Андрей Остапец (..."Контекстная реклама в Avito: что под капотом?" Вадим Аюев и Андрей Остапец (...
"Контекстная реклама в Avito: что под капотом?" Вадим Аюев и Андрей Остапец (...AvitoTech
 
Использование Tarantool в качестве платформы виртуализации данных / Константи...
Использование Tarantool в качестве платформы виртуализации данных / Константи...Использование Tarantool в качестве платформы виртуализации данных / Константи...
Использование Tarantool в качестве платформы виртуализации данных / Константи...Ontico
 

Viewers also liked (20)

Зачем в Avito Аналитика?
Зачем в Avito Аналитика?Зачем в Avito Аналитика?
Зачем в Avito Аналитика?
 
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
Олег Анастасьев "Ближе к Cassandra". Выступление на Cassandra Conf 2013
 
Cоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTargetCоциальный граф "Одноклассников" в myTarget
Cоциальный граф "Одноклассников" в myTarget
 
Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...
Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...
Франкенштейнизация Voldemort или key-value данные в Одноклассниках. Роман Ан...
 
Класс!ная Cassandra
Класс!ная CassandraКласс!ная Cassandra
Класс!ная Cassandra
 
Рекомендации в Avito - Василий Лексин (Avito)
Рекомендации в Avito - Василий Лексин (Avito)Рекомендации в Avito - Василий Лексин (Avito)
Рекомендации в Avito - Василий Лексин (Avito)
 
За гранью NoSQL: NewSQL на Cassandra
За гранью NoSQL: NewSQL на CassandraЗа гранью NoSQL: NewSQL на Cassandra
За гранью NoSQL: NewSQL на Cassandra
 
HBase on Dev{Highload}
HBase on Dev{Highload}HBase on Dev{Highload}
HBase on Dev{Highload}
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015
 
"Опыт участия в Microsoft Malware Classification Challenge" Михаил Трофимов ...
"Опыт участия в Microsoft Malware Classification Challenge"  Михаил Трофимов ..."Опыт участия в Microsoft Malware Classification Challenge"  Михаил Трофимов ...
"Опыт участия в Microsoft Malware Classification Challenge" Михаил Трофимов ...
 
“Атличнаи дивчачьи каньки”: исправляем ошибки. Андрей Смирнов (Avito)
“Атличнаи дивчачьи каньки”: исправляем ошибки. Андрей Смирнов (Avito)“Атличнаи дивчачьи каньки”: исправляем ошибки. Андрей Смирнов (Avito)
“Атличнаи дивчачьи каньки”: исправляем ошибки. Андрей Смирнов (Avito)
 
"Распознавание марки и модели автомашин на изображениях" Евгений Нижибицкий (...
"Распознавание марки и модели автомашин на изображениях" Евгений Нижибицкий (..."Распознавание марки и модели автомашин на изображениях" Евгений Нижибицкий (...
"Распознавание марки и модели автомашин на изображениях" Евгений Нижибицкий (...
 
"DeepLink’и в Avito" Артём Разинов (Avito)
"DeepLink’и в Avito" Артём Разинов (Avito)"DeepLink’и в Avito" Артём Разинов (Avito)
"DeepLink’и в Avito" Артём Разинов (Avito)
 
"Распознавание категории объявления по изображениям" Артур Кузин (МФТИ)
"Распознавание категории объявления по изображениям" Артур Кузин (МФТИ)"Распознавание категории объявления по изображениям" Артур Кузин (МФТИ)
"Распознавание категории объявления по изображениям" Артур Кузин (МФТИ)
 
"Погружение в Robolectric" Дмитрий Костырев (Avito)
"Погружение в Robolectric"  Дмитрий Костырев (Avito)"Погружение в Robolectric"  Дмитрий Костырев (Avito)
"Погружение в Robolectric" Дмитрий Костырев (Avito)
 
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
"Кластеры баз данных: делаем сложные вещи просто" Андрей Тихонов (Avito)
 
"Построение рекомендательной системы на Python" Василий Лексин (Avito)
"Построение рекомендательной системы на Python" Василий Лексин (Avito)"Построение рекомендательной системы на Python" Василий Лексин (Avito)
"Построение рекомендательной системы на Python" Василий Лексин (Avito)
 
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
Tarantool: как обрабатывать 
1,5 млрд запросов в сутки?
 
"Контекстная реклама в Avito: что под капотом?" Вадим Аюев и Андрей Остапец (...
"Контекстная реклама в Avito: что под капотом?" Вадим Аюев и Андрей Остапец (..."Контекстная реклама в Avito: что под капотом?" Вадим Аюев и Андрей Остапец (...
"Контекстная реклама в Avito: что под капотом?" Вадим Аюев и Андрей Остапец (...
 
Использование Tarantool в качестве платформы виртуализации данных / Константи...
Использование Tarantool в качестве платформы виртуализации данных / Константи...Использование Tarantool в качестве платформы виртуализации данных / Константи...
Использование Tarantool в качестве платформы виртуализации данных / Константи...
 

Similar to "Building data streams" Константин Евтеев (Avito)

Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"
Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"
Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"Fwdays
 
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...Ontico
 
Java осень 2013 лекция 6
Java осень 2013 лекция 6Java осень 2013 лекция 6
Java осень 2013 лекция 6Technopark
 
История из жизни. Демонстрация работы реального злоумышленника на примере ата...
История из жизни. Демонстрация работы реального злоумышленника на примере ата...История из жизни. Демонстрация работы реального злоумышленника на примере ата...
История из жизни. Демонстрация работы реального злоумышленника на примере ата...Dmitry Evteev
 
Архитектура защищенного периметра
Архитектура защищенного периметраАрхитектура защищенного периметра
Архитектура защищенного периметраCisco Russia
 
Cisco Threat Defense (Cisco Stealthwatch)
Cisco Threat Defense (Cisco Stealthwatch)Cisco Threat Defense (Cisco Stealthwatch)
Cisco Threat Defense (Cisco Stealthwatch)Cisco Russia
 
Сквозное управление доступом - от пользователя и дальше
Сквозное управление доступом - от пользователя и дальшеСквозное управление доступом - от пользователя и дальше
Сквозное управление доступом - от пользователя и дальшеCisco Russia
 
Cisco StealthWatch. Использование телеметрии для решения проблемы зашифрованн...
Cisco StealthWatch. Использование телеметрии для решения проблемы зашифрованн...Cisco StealthWatch. Использование телеметрии для решения проблемы зашифрованн...
Cisco StealthWatch. Использование телеметрии для решения проблемы зашифрованн...Cisco Russia
 
Техники пентеста для активной защиты - Николай Овчарук
Техники пентеста для активной защиты - Николай ОвчарукТехники пентеста для активной защиты - Николай Овчарук
Техники пентеста для активной защиты - Николай ОвчарукHackIT Ukraine
 
6 кареев киров
6 кареев киров6 кареев киров
6 кареев кировqasib
 
Миграция JIRA - безобразие или безрассудство
Миграция JIRA - безобразие или безрассудствоМиграция JIRA - безобразие или безрассудство
Миграция JIRA - безобразие или безрассудствоSQALab
 
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковSergey Platonov
 
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Yandex
 
Сеть как сенсор и средство контроля
Сеть как сенсор и средство контроляСеть как сенсор и средство контроля
Сеть как сенсор и средство контроляCisco Russia
 
Positive Hack Days. Павлов. Мастер-класс: Анализ защищенности сетевой инфраст...
Positive Hack Days. Павлов. Мастер-класс: Анализ защищенности сетевой инфраст...Positive Hack Days. Павлов. Мастер-класс: Анализ защищенности сетевой инфраст...
Positive Hack Days. Павлов. Мастер-класс: Анализ защищенности сетевой инфраст...Positive Hack Days
 
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow Vadim Nesterov
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Ontico
 
Java осень 2014 занятие 6
Java осень 2014 занятие 6Java осень 2014 занятие 6
Java осень 2014 занятие 6Technopark
 
Информационная безопасность и web-приложения
Информационная безопасность и web-приложенияИнформационная безопасность и web-приложения
Информационная безопасность и web-приложенияMaxim Krentovskiy
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"Technopark
 

Similar to "Building data streams" Константин Евтеев (Avito) (20)

Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"
Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"
Дмитрий Меньшиков "Топ-10 фейлов на реальном highload проекте"
 
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
Application Security - ответы на ежедневные вопросы / Сергей Белов (Mail.Ru G...
 
Java осень 2013 лекция 6
Java осень 2013 лекция 6Java осень 2013 лекция 6
Java осень 2013 лекция 6
 
История из жизни. Демонстрация работы реального злоумышленника на примере ата...
История из жизни. Демонстрация работы реального злоумышленника на примере ата...История из жизни. Демонстрация работы реального злоумышленника на примере ата...
История из жизни. Демонстрация работы реального злоумышленника на примере ата...
 
Архитектура защищенного периметра
Архитектура защищенного периметраАрхитектура защищенного периметра
Архитектура защищенного периметра
 
Cisco Threat Defense (Cisco Stealthwatch)
Cisco Threat Defense (Cisco Stealthwatch)Cisco Threat Defense (Cisco Stealthwatch)
Cisco Threat Defense (Cisco Stealthwatch)
 
Сквозное управление доступом - от пользователя и дальше
Сквозное управление доступом - от пользователя и дальшеСквозное управление доступом - от пользователя и дальше
Сквозное управление доступом - от пользователя и дальше
 
Cisco StealthWatch. Использование телеметрии для решения проблемы зашифрованн...
Cisco StealthWatch. Использование телеметрии для решения проблемы зашифрованн...Cisco StealthWatch. Использование телеметрии для решения проблемы зашифрованн...
Cisco StealthWatch. Использование телеметрии для решения проблемы зашифрованн...
 
Техники пентеста для активной защиты - Николай Овчарук
Техники пентеста для активной защиты - Николай ОвчарукТехники пентеста для активной защиты - Николай Овчарук
Техники пентеста для активной защиты - Николай Овчарук
 
6 кареев киров
6 кареев киров6 кареев киров
6 кареев киров
 
Миграция JIRA - безобразие или безрассудство
Миграция JIRA - безобразие или безрассудствоМиграция JIRA - безобразие или безрассудство
Миграция JIRA - безобразие или безрассудство
 
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворковНикита Глушков, К вопросу о реализации кроссплатформенных фреймворков
Никита Глушков, К вопросу о реализации кроссплатформенных фреймворков
 
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
 
Сеть как сенсор и средство контроля
Сеть как сенсор и средство контроляСеть как сенсор и средство контроля
Сеть как сенсор и средство контроля
 
Positive Hack Days. Павлов. Мастер-класс: Анализ защищенности сетевой инфраст...
Positive Hack Days. Павлов. Мастер-класс: Анализ защищенности сетевой инфраст...Positive Hack Days. Павлов. Мастер-класс: Анализ защищенности сетевой инфраст...
Positive Hack Days. Павлов. Мастер-класс: Анализ защищенности сетевой инфраст...
 
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow Zabbix в сервисной компании  ОНЛАНТА -  Zabbix Meetup Moscow
Zabbix в сервисной компании  ОНЛАНТА - Zabbix Meetup Moscow
 
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
Механизмы мониторинга баз данных: взгляд изнутри / Дмитрий Еманов (Firebird P...
 
Java осень 2014 занятие 6
Java осень 2014 занятие 6Java осень 2014 занятие 6
Java осень 2014 занятие 6
 
Информационная безопасность и web-приложения
Информационная безопасность и web-приложенияИнформационная безопасность и web-приложения
Информационная безопасность и web-приложения
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"
 

More from AvitoTech

Сегментация изображений на острие науки (Евгений Нижибицкий, Rambler&Co)
Сегментация изображений на острие науки (Евгений Нижибицкий, Rambler&Co)Сегментация изображений на острие науки (Евгений Нижибицкий, Rambler&Co)
Сегментация изображений на острие науки (Евгений Нижибицкий, Rambler&Co)AvitoTech
 
Применение компьютерного зрения для анализа спортивных соревнований (Николай ...
Применение компьютерного зрения для анализа спортивных соревнований (Николай ...Применение компьютерного зрения для анализа спортивных соревнований (Николай ...
Применение компьютерного зрения для анализа спортивных соревнований (Николай ...AvitoTech
 
Распознавание лиц с помощью глубоких нейронных сетей (Сергей Миляев, VisionLabs)
Распознавание лиц с помощью глубоких нейронных сетей (Сергей Миляев, VisionLabs)Распознавание лиц с помощью глубоких нейронных сетей (Сергей Миляев, VisionLabs)
Распознавание лиц с помощью глубоких нейронных сетей (Сергей Миляев, VisionLabs)AvitoTech
 
AvitoNet: сервис компьютерного зрения в Avito (Артур Кузин, Avito)
AvitoNet: сервис компьютерного зрения в Avito (Артур Кузин, Avito)AvitoNet: сервис компьютерного зрения в Avito (Артур Кузин, Avito)
AvitoNet: сервис компьютерного зрения в Avito (Артур Кузин, Avito)AvitoTech
 
Yandex Tank - Арсений Фомченко
Yandex Tank - Арсений ФомченкоYandex Tank - Арсений Фомченко
Yandex Tank - Арсений ФомченкоAvitoTech
 
Migro - Юрий Богомолов
Migro - Юрий БогомоловMigro - Юрий Богомолов
Migro - Юрий БогомоловAvitoTech
 
TableKit - Максим Соколов
TableKit - Максим СоколовTableKit - Максим Соколов
TableKit - Максим СоколовAvitoTech
 
Jsonwire Grid - Михаил Подцерковский (Avito)
Jsonwire Grid - Михаил Подцерковский (Avito)Jsonwire Grid - Михаил Подцерковский (Avito)
Jsonwire Grid - Михаил Подцерковский (Avito)AvitoTech
 
SimplePEG - Алексей Охрименко
SimplePEG - Алексей ОхрименкоSimplePEG - Алексей Охрименко
SimplePEG - Алексей ОхрименкоAvitoTech
 
Как перестать бояться и начать контрибьютить - Алексей Кудрявцев
 Как перестать бояться и начать контрибьютить - Алексей Кудрявцев Как перестать бояться и начать контрибьютить - Алексей Кудрявцев
Как перестать бояться и начать контрибьютить - Алексей КудрявцевAvitoTech
 
"Анонимизация фото с помощью Vision", Хомутников Тимофей, Avito
"Анонимизация фото с помощью Vision",  Хомутников Тимофей, Avito"Анонимизация фото с помощью Vision",  Хомутников Тимофей, Avito
"Анонимизация фото с помощью Vision", Хомутников Тимофей, AvitoAvitoTech
 
“iOS 11 в App in the Air”, Пронин Сергей, App in the Air
“iOS 11 в App in the Air”, Пронин Сергей, App in the Air“iOS 11 в App in the Air”, Пронин Сергей, App in the Air
“iOS 11 в App in the Air”, Пронин Сергей, App in the AirAvitoTech
 
"ARKit в приложении Афиша Рестораны”, Меджлумян Самвел, Антышев Дмитрий, Ramb...
"ARKit в приложении Афиша Рестораны”, Меджлумян Самвел, Антышев Дмитрий, Ramb..."ARKit в приложении Афиша Рестораны”, Меджлумян Самвел, Антышев Дмитрий, Ramb...
"ARKit в приложении Афиша Рестораны”, Меджлумян Самвел, Антышев Дмитрий, Ramb...AvitoTech
 
ASO for iOS 11
ASO for iOS 11ASO for iOS 11
ASO for iOS 11AvitoTech
 
Добиваемся эффективности каждого из 9000+ UI-тестов - Максим Сахаров (Tutu.ru)
Добиваемся эффективности каждого из 9000+ UI-тестов - Максим Сахаров (Tutu.ru)Добиваемся эффективности каждого из 9000+ UI-тестов - Максим Сахаров (Tutu.ru)
Добиваемся эффективности каждого из 9000+ UI-тестов - Максим Сахаров (Tutu.ru)AvitoTech
 
Проблемы управления тестами, или Что мешает создавать дешевые и полезные тест...
Проблемы управления тестами, или Что мешает создавать дешевые и полезные тест...Проблемы управления тестами, или Что мешает создавать дешевые и полезные тест...
Проблемы управления тестами, или Что мешает создавать дешевые и полезные тест...AvitoTech
 
Запускаем тесты в Continuous Integration - Сергей Пак (JetBrains)
Запускаем тесты в Continuous Integration - Сергей Пак (JetBrains)Запускаем тесты в Continuous Integration - Сергей Пак (JetBrains)
Запускаем тесты в Continuous Integration - Сергей Пак (JetBrains)AvitoTech
 
Векторы развития систем автоматизации тестирования - Дмитрий Химион (Avito)
Векторы развития систем автоматизации тестирования - Дмитрий Химион (Avito)Векторы развития систем автоматизации тестирования - Дмитрий Химион (Avito)
Векторы развития систем автоматизации тестирования - Дмитрий Химион (Avito)AvitoTech
 
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...AvitoTech
 
Конкурс Авито-2017 - Решение 2ое место - Василий Рубцов
Конкурс Авито-2017 - Решение 2ое место - Василий РубцовКонкурс Авито-2017 - Решение 2ое место - Василий Рубцов
Конкурс Авито-2017 - Решение 2ое место - Василий РубцовAvitoTech
 

More from AvitoTech (20)

Сегментация изображений на острие науки (Евгений Нижибицкий, Rambler&Co)
Сегментация изображений на острие науки (Евгений Нижибицкий, Rambler&Co)Сегментация изображений на острие науки (Евгений Нижибицкий, Rambler&Co)
Сегментация изображений на острие науки (Евгений Нижибицкий, Rambler&Co)
 
Применение компьютерного зрения для анализа спортивных соревнований (Николай ...
Применение компьютерного зрения для анализа спортивных соревнований (Николай ...Применение компьютерного зрения для анализа спортивных соревнований (Николай ...
Применение компьютерного зрения для анализа спортивных соревнований (Николай ...
 
Распознавание лиц с помощью глубоких нейронных сетей (Сергей Миляев, VisionLabs)
Распознавание лиц с помощью глубоких нейронных сетей (Сергей Миляев, VisionLabs)Распознавание лиц с помощью глубоких нейронных сетей (Сергей Миляев, VisionLabs)
Распознавание лиц с помощью глубоких нейронных сетей (Сергей Миляев, VisionLabs)
 
AvitoNet: сервис компьютерного зрения в Avito (Артур Кузин, Avito)
AvitoNet: сервис компьютерного зрения в Avito (Артур Кузин, Avito)AvitoNet: сервис компьютерного зрения в Avito (Артур Кузин, Avito)
AvitoNet: сервис компьютерного зрения в Avito (Артур Кузин, Avito)
 
Yandex Tank - Арсений Фомченко
Yandex Tank - Арсений ФомченкоYandex Tank - Арсений Фомченко
Yandex Tank - Арсений Фомченко
 
Migro - Юрий Богомолов
Migro - Юрий БогомоловMigro - Юрий Богомолов
Migro - Юрий Богомолов
 
TableKit - Максим Соколов
TableKit - Максим СоколовTableKit - Максим Соколов
TableKit - Максим Соколов
 
Jsonwire Grid - Михаил Подцерковский (Avito)
Jsonwire Grid - Михаил Подцерковский (Avito)Jsonwire Grid - Михаил Подцерковский (Avito)
Jsonwire Grid - Михаил Подцерковский (Avito)
 
SimplePEG - Алексей Охрименко
SimplePEG - Алексей ОхрименкоSimplePEG - Алексей Охрименко
SimplePEG - Алексей Охрименко
 
Как перестать бояться и начать контрибьютить - Алексей Кудрявцев
 Как перестать бояться и начать контрибьютить - Алексей Кудрявцев Как перестать бояться и начать контрибьютить - Алексей Кудрявцев
Как перестать бояться и начать контрибьютить - Алексей Кудрявцев
 
"Анонимизация фото с помощью Vision", Хомутников Тимофей, Avito
"Анонимизация фото с помощью Vision",  Хомутников Тимофей, Avito"Анонимизация фото с помощью Vision",  Хомутников Тимофей, Avito
"Анонимизация фото с помощью Vision", Хомутников Тимофей, Avito
 
“iOS 11 в App in the Air”, Пронин Сергей, App in the Air
“iOS 11 в App in the Air”, Пронин Сергей, App in the Air“iOS 11 в App in the Air”, Пронин Сергей, App in the Air
“iOS 11 в App in the Air”, Пронин Сергей, App in the Air
 
"ARKit в приложении Афиша Рестораны”, Меджлумян Самвел, Антышев Дмитрий, Ramb...
"ARKit в приложении Афиша Рестораны”, Меджлумян Самвел, Антышев Дмитрий, Ramb..."ARKit в приложении Афиша Рестораны”, Меджлумян Самвел, Антышев Дмитрий, Ramb...
"ARKit в приложении Афиша Рестораны”, Меджлумян Самвел, Антышев Дмитрий, Ramb...
 
ASO for iOS 11
ASO for iOS 11ASO for iOS 11
ASO for iOS 11
 
Добиваемся эффективности каждого из 9000+ UI-тестов - Максим Сахаров (Tutu.ru)
Добиваемся эффективности каждого из 9000+ UI-тестов - Максим Сахаров (Tutu.ru)Добиваемся эффективности каждого из 9000+ UI-тестов - Максим Сахаров (Tutu.ru)
Добиваемся эффективности каждого из 9000+ UI-тестов - Максим Сахаров (Tutu.ru)
 
Проблемы управления тестами, или Что мешает создавать дешевые и полезные тест...
Проблемы управления тестами, или Что мешает создавать дешевые и полезные тест...Проблемы управления тестами, или Что мешает создавать дешевые и полезные тест...
Проблемы управления тестами, или Что мешает создавать дешевые и полезные тест...
 
Запускаем тесты в Continuous Integration - Сергей Пак (JetBrains)
Запускаем тесты в Continuous Integration - Сергей Пак (JetBrains)Запускаем тесты в Continuous Integration - Сергей Пак (JetBrains)
Запускаем тесты в Continuous Integration - Сергей Пак (JetBrains)
 
Векторы развития систем автоматизации тестирования - Дмитрий Химион (Avito)
Векторы развития систем автоматизации тестирования - Дмитрий Химион (Avito)Векторы развития систем автоматизации тестирования - Дмитрий Химион (Avito)
Векторы развития систем автоматизации тестирования - Дмитрий Химион (Avito)
 
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...
Прокачиваем WebDriverAgent, или Как тестировать iOS-приложения после ядерного...
 
Конкурс Авито-2017 - Решение 2ое место - Василий Рубцов
Конкурс Авито-2017 - Решение 2ое место - Василий РубцовКонкурс Авито-2017 - Решение 2ое место - Василий Рубцов
Конкурс Авито-2017 - Решение 2ое место - Василий Рубцов
 

"Building data streams" Константин Евтеев (Avito)

  • 1. Strictly ConfidentialStrictly Confidential Building data streams Константин Евтеев kevteev@avito.ru
  • 2. 2Strictly Confidential 2Strictly Confidential 2 CRUD read DBcreate update delete read read read read read
  • 3. 3Strictly Confidential 3Strictly Confidential 3 1 Оптимизируем процедуры выборки 2 Вертикальное и функциональное масштабирование 3 Вводим в бой стендбаи бинарной репликации 4 Денормализуем данные для чтения 5 Шардирование 6 Денормализованные данные выносим на отдельные машины Optimization steps
  • 4. 4Strictly Confidential 4Strictly Confidential 4 C(R)UD & R  read DBcreate update delete read read read read read DB-SB
  • 5. 5Strictly Confidential 5Strictly Confidential 5 movies id name length_minutes rating_id movie_showtimes id movie_id theatre_id room start_time theatres id name phone_number purchased_tickets id confirmation_code purchase_price_cents auditoriums theatre_id room seats_available orders confirmation_code movie_showtime_id movie_id theatre_id auditorium_id room start_time Денормализуем данные для чтения mat_view movie_name movie_rating_id movie_length_minutes movie_id, theatre_id, room, start_time, theatre_name, seats_availble ... http://www.slideshare.net/pavlushko/sphinx-10460333 http://www.pgcon.org/2008/schedule/attachments/64_BSDCan2008-MaterializedViews-paper.pdf http://www.pgcon.org/2008/schedule/attachments/63_BSDCan2008-MaterializedViews.pdf
  • 6. 6Strictly Confidential 6Strictly Confidential 6 It looks like 1 Command and Query Responsibility Segregation (CQRS) или Command-query separation (CQS) 2 Event Sourcing 3 Eventual consistency 4 Lambda Architecture 5 Kappa Architecture http://lambda-architecture.net/ http://milinda.pathirage.org/kappa-architecture.com/
  • 7. 7Strictly Confidential 7Strictly Confidential 7 DB CUD (CRUD) mv1 Field1 - fieldN DB-SB R DBN- CUD (CRUD) DB-SB R mvN Field1 - fieldN DB-SB Rmv1 Field1 - fieldN DB-RE-01*2 mv2 Field1 - fieldN mv1 Field1 - fieldN DB-RE-N*2 mv6 Field1 - fieldN mv3 Field1 - fieldN DBN-SB R DBN-SB R node1 node2 node3 node3 PL/Proxy cluster dwh Data streams
  • 8. 8Strictly Confidential 8Strictly Confidential 8 Выгрузка по времени + работает − есть вопросы
  • 9. 9Strictly Confidential 9Strictly Confidential 9 Выгрузка данных batch-ами Источник Буфер ПриемникТранспорт транспорт #pg_current_xlog_insert_location()  #Get current transaction log insert location master_pos=$(psql_ping_db ­c "select force_wal(pg_current_xlog_insert_location())") #pg_xlog_location_diff(location text, location text)  numeric  #Calculate the difference between two transaction log locations psql ­c "select pg_xlog_location_diff(pg_last_xlog_replay_location(), '${master_pos}')") https://github.com/eshkinkot/pgday2016/tree/master/ping_DB
  • 10. 1Strictly Confidential 1Strictly Confidential 10 Ticker & pgq 2008 год! https://www.pgcon.org/2008/schedule/attachments/55_pgq.pdf https://www.postgresql.org/docs/9.4/static/functions-info.html#FUNCTIONS- TXID-SNAPSHOT https://github.com/markokr/skytools/tree/skytools_2_1_stable/python https://github.com/markokr/skytools/blob/skytools_2_1_stable/sql/pgq/functions/pg q.ticker.sql http://www.pgcon.org/2009/schedule/attachments/91_pgq.pdf
  • 11. 1Strictly Confidential 1Strictly Confidential 11 MVCC (https://www.postgresql.org/docs/8.3/static/release-8-3.html) Add several txid_*() functions to query active transaction IDs (Jan) This is useful for various replication solutions.
  • 12. 1Strictly Confidential 1Strictly Confidential 12 How to select txids that are between snapshots xmin1 xmax1 xmax2 xmax1 xmin2
  • 13. 1Strictly Confidential 1Strictly Confidential 13 Все изменения данных под единой блокировкой объекта(row level) Item sCategory params values moderatio n doublets Fee packages … User sContact informatio n shops, company Afraud payments … User lock Item lock Payme nt data Items data Users data Под блокировкой понимаем цепочку блокировок: select item_id from items for update;
  • 14. 1Strictly Confidential 1Strictly Confidential 14 Сессионные переменные “signal” 1. Достаточно дешево по ресурсам 2. Не нужно разбирать цепочку вызовов процедур, и добавлять входные/выходные параметры Достоинства:
  • 15. 1Strictly Confidential 1Strictly Confidential 15 Сессионные переменные, групповые действия, подводные камни … В 1 транзакции может меняться несколько объектов, а событие относится не ко всем. Решение:Используем массив по unique key array ‘{}’
  • 16. 1Strictly Confidential 1Strictly Confidential 16 Init remote mv or counter https://www.depesz.com/2016/06/14/incrementing-counters-in-database/ 1) Cоздать временную таблицу на стороне подписчика 2) Создать принимающую процедуру ● временную для инициализации ● реальную 3)Начинаем слать события 4)Запускаем инициализацию со стендбая(дождаться прихода события, с которого начали заполнять временную таблицу) 5)Переключаем на реальную процедуру приема 6)Пересчитываем под блокировкой через очередь
  • 17. 1Strictly Confidential 1Strictly Confidential 17 Init remote mv or counter items item_id user_id category_id last_update_txtime CONSTRAINT TRIGGER  items_delta   AFTER INSERT OR UPDATE OR  DELETE providerprovider subscriber pgq user_items_cnt user_id category_id cnt date tmp_user_cnt user_id 1 save data for recount after init 2 copy 3 switch accept to real table https://github.com/eshkinkot/pgday2016/tree/master/remote_cnt
  • 18. 1Strictly Confidential 1Strictly Confidential 18 Table and trigger function on provider's side
  • 19. 1Strictly Confidential 1Strictly Confidential 19 Tables on subscriber's side Accept function
  • 20. 2Strictly Confidential 2Strictly Confidential 20 Provider init function
  • 21. 2Strictly Confidential 2Strictly Confidential 21 Subscriber's init functions
  • 22. 2Strictly Confidential 2Strictly Confidential 22 Maintenance
  • 23. 2Strictly Confidential 2Strictly Confidential 23 Real time sphinx index Main DB mat_view_index Id field1 …. filedN DB-RE-IND mat_view_index Id field1 …. filedN sphinx londiste Select full reindex pgq pgq consumer
  • 24. 2Strictly Confidential 2Strictly Confidential 24 Persistent queue table1 Id field1 …. filedN pgq Table1 1 Id field1 …. filedN tick_id call_id Table1 n Id field1 …. filedN tick_id call_id Lock free rotation complex object tbl 1 Id field1 …. filedN tick_id call_id complex object tbl n Id field1 …. filedN tick_id call_id Lock free rotation Complex object part 1 Id field1 …. Complex object part 1 Id field1 …. Complex object part 1 Id field1 …. deferred trg deferred trg
  • 25. 2Strictly Confidential 2Strictly Confidential 25 Особенности согласования данных Eventual consistency 1 Read with ver num master Avito_delta Client Avito_delta reserv 3 (if 2) write due to delay possible in pgq pgq 2 consumers 2 write with check version
  • 26. 2Strictly Confidential 2Strictly Confidential 26 Восстановление после аварий provider sb subscriber provider undo provider subscriber subscriber subscriber 1 crash 3 apply undo 2 promote 4 start consumer 3 copy 1 crash 2 stop consumer 4 Add new consumer 5 start consumer
  • 27. White Gardens Business Center, 7 Lesnaya street, Moscow, 125047, www.avito.ruWhite Gardens Business Center, 7 Lesnaya street, Moscow, 125047, www.avito.ru Thank you for your attention! White Gardens Business Center, 7 Lesnaya street, Moscow, 125047, www.avito.ru Спасибо за внимание! Константин Евтеев kevteev@avito.ru https://hh.ru/vacancy/10795267 https://hh.ru/vacancy/11463461