SlideShare a Scribd company logo
2
@zzetorg
ÏПËЛÀАÒТÔФÎОÐРÌМÀА ÄДËЛßЯ ÑСÎОÇЗÄДÀАÍНÈИßЯ
ÈИ ÏПÐРÎОÑСÌМÎОÒТÐРÀА ÊКÎОÐРÎОÒТÊКÈИÕХ
ÇЗÀАÖЦÈИÊКËЛÅЕÍНÍНÛЫÕХ ÂВÈИÄДÅЕÎО ÄДÎО
10 ÑСÅЕÊКÓУÍНÄД ÄДËЛÈИÍНÍНÎОÉЙ
3
4
5
6
— N миллионов записей

— Взять из них 10 записей

— Подготовить JSON

— Отправить пользователю
7
+
8
— Большой JSON ~140 Kb

— Нетривиальная выборка

— Записи обновляются часто

— Tree

— Нет старого контента
9
10
11
Erotica

Banned

Private

Friends only

Copyright

Subscription

… etc.
12
0
175
350
525
700
1 10 20 40 50 100 200 300 500 700 1000
t, ms
follows
13
14
15
16
17
SELECT * FROM coubs LIMIT 10;

SELECT * FROM coubs LIMIT 10 OFFSET 10;

INSERT INTO coubs ........;

SELECT * FROM coubs LIMIT 10 OFFSET 20;
18
SELECT * FROM coubs LIMIT 10;

SELECT * FROM coubs LIMIT 10 OFFSET 10;

DELETE FROM coubs WHERE ........;

SELECT * FROM coubs LIMIT 10 OFFSET 20;
19
SELECT * FROM coubs LIMIT 10;

SELECT * FROM coubs LIMIT 10 OFFSET 10;

UPDATE coubs ........;

SELECT * FROM coubs LIMIT 10 OFFSET 20;
20
— Большой JSON ~140 Kb

— Нетривиальная выборка

— Записи обновляются часто

— Tree

— Нет старого контента
21
— Большой JSON ~140 Kb

— Нетривиальная выборка

— Записи обновляются часто
— Tree

— Нет старого контента
22
SELECT * FROM coubs 

ORDER BY key LIMIT 10;

SELECT * FROM coubs WHERE key < ... 

ORDER BY key LIMIT 10;

INSERT INTO coubs ……..;

SELECT * FROM coubs WHERE key < ... 

ORDER BY key LIMIT 10;
23
SELECT * FROM coubs 

ORDER BY key DESC LIMIT 10;

SELECT * FROM coubs WHERE key < ... 

ORDER BY key DESC LIMIT 10;

DELETE FROM coubs WHERE ...;

SELECT * FROM coubs WHERE key < ... 

ORDER BY key DESC LIMIT 10;
24
SNAPSHOT
(CACHE)
25
— Нужно хотя бы 1 раз сгенерировать

— Нужно где-то хранить

— Нужно как-то актуализировать
26
— Нужно хотя бы 1 раз сгенерировать
— Нужно где-то хранить

— Нужно как-то актуализировать
27
Page 1: делаем копию доступных данных

Page 2: работаем с данными из копии

Page 3: работаем с данными из копии
28
— Нужно хотя бы 1 раз сгенерировать

— Нужно где-то хранить
— Нужно как-то актуализировать
29
30
Page 1: делаем копию доступных данных

Page 2: работаем с данными из копии
31
— Нужно хотя бы 1 раз сгенерировать

— Нужно где-то хранить

— Нужно как-то актуализировать
32
Page 1: делаем копию доступных данных

Page 1: добавляем новые записи

Page 2: работаем с данными из копии
33
Генерация первого набора - долго

Достройка кеша - долго*

* при редких посещениях
34
ÎОÏПÒТÈИÌМÈИÇЗÈИÐРÓУÉЙ
SQL
35
36
— Берем все кобы, которые попадают в подписки
— Среди этих кобов ищем дублирующиеся рекобы
— Выкидываем их, оставляем только первые
— Выкидываем все то, что не должно быть видно
ÁБÛЫËЛÎО ÊКÀАÊК-ÒТÎО ÒТÀАÊК
40000
600
Несколько запросов
1 запрос
ms
37
ms
38
39
502
40
×ЧÒТÎО
ÄДÀАËЛÜЬØШÅЕ?
41
ÏПÎОËЛÓУ×ЧÅЕÍНÈИÅЕ
ÄДÀАÍНÍНÛЫÕХ
ÏПÀАÐРÀАËЛËЛÅЕËЛÜЬÍНÎО
42
43
44
45
ÎОÒТÄДÅЕËЛÜЬÍНÛЫÉЙ
ÑСÅЕÐРÂВÈИÑС
46
Write:
— New coub / recoub
— Follow
Read:
— Page + PerPage = [ids]
47
48
ÏПÎО×ЧÅЕÌМÓУ
ERLANG?
HOW IT
WORKS
49
FRONTEND SERVERS
DATABASE SERVERS TIMELINE SERVER
BACKEND SERVERS
1
2 34 5
6
0.02-2ms
1.5——-–2ms
~200-500ms
50
FRONTEND SERVERS
DATABASE SERVERS TIMELINE SERVER
BACKEND SERVERS
1
2 32 3
4
äдîо 5 ìмèи…
0.05 - 5ms
51
4
5
52
api workers
workers
hot data
fetch
worker
data
refresh
worker
update
worker
immediate
workers
workers
53
hash table
record
user_id
integer
coub_ids
list
tech_data
integer/binary
hash table
record
user_id
integer
coubs
record
tech_data
integer/binary
hot data
data
ÏПÎО×ЧÅЕÌМÓУ ÂВÑСÅЕ ÒТÀАÊК
ÏПÎОËЛÓУ×ЧÈИËЛÎОÑСÜЬ?
54
@zzetorg

More Related Content

What's hot

С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo). С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
Badoo Development
 
Массовые операции над письмами в Яндекс.Почте — Денис Кутуков
Массовые операции над письмами в Яндекс.Почте — Денис КутуковМассовые операции над письмами в Яндекс.Почте — Денис Кутуков
Массовые операции над письмами в Яндекс.Почте — Денис Кутуков
Yandex
 
SphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricksSphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricks
Roman Pavlushko
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
Yandex
 
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
Ontico
 
Владислав Животнев - Основы DNS
Владислав Животнев - Основы DNSВладислав Животнев - Основы DNS
Владислав Животнев - Основы DNSYandex
 
kranonit S04E01 Антон: Защита от Master Boot Record Locker
kranonit S04E01 Антон: Защита от Master Boot Record Lockerkranonit S04E01 Антон: Защита от Master Boot Record Locker
kranonit S04E01 Антон: Защита от Master Boot Record LockerKrivoy Rog IT Community
 
Базы данных. MongoDB
Базы данных. MongoDBБазы данных. MongoDB
Базы данных. MongoDB
Vadim Tsesko
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012Roman Pavlushko
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
Nikolay Samokhvalov
 
Опыт внедрения DNSSEC
Опыт внедрения DNSSECОпыт внедрения DNSSEC
Опыт внедрения DNSSEC
Philipp Kulin
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)
Ontico
 
05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколы05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколы
Roman Brovko
 
Microsoft cluster systems ritconf
Microsoft cluster systems ritconfMicrosoft cluster systems ritconf
Microsoft cluster systems ritconfrit2010
 
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
Ontico
 
Барнаул15
Барнаул15Барнаул15
Барнаул15
Михаил Тюрин
 
Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)Ontico
 
Lobanov_Cloud-Comput..
Lobanov_Cloud-Comput..Lobanov_Cloud-Comput..
Lobanov_Cloud-Comput..webhostingguy
 

What's hot (20)

С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo). С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
С чего начать внедрение Hadoop в компании. Доклад Алексея Еремихина (Badoo).
 
Массовые операции над письмами в Яндекс.Почте — Денис Кутуков
Массовые операции над письмами в Яндекс.Почте — Денис КутуковМассовые операции над письмами в Яндекс.Почте — Денис Кутуков
Массовые операции над письмами в Яндекс.Почте — Денис Кутуков
 
SphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricksSphinxSearch Meetup - Tips&tricks
SphinxSearch Meetup - Tips&tricks
 
Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"Леонид Васильев "Python в инфраструктуре поиска"
Леонид Васильев "Python в инфраструктуре поиска"
 
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
Хранение json-документов в Tarantool / Андрей Дроздов (Mail.ru Group)
 
Владислав Животнев - Основы DNS
Владислав Животнев - Основы DNSВладислав Животнев - Основы DNS
Владислав Животнев - Основы DNS
 
kranonit S04E01 Антон: Защита от Master Boot Record Locker
kranonit S04E01 Антон: Защита от Master Boot Record Lockerkranonit S04E01 Антон: Защита от Master Boot Record Locker
kranonit S04E01 Антон: Защита от Master Boot Record Locker
 
Базы данных. MongoDB
Базы данных. MongoDBБазы данных. MongoDB
Базы данных. MongoDB
 
AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012AVITO. Решардинг Redis без даунтайма. DevConf 2012
AVITO. Решардинг Redis без даунтайма. DevConf 2012
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
 
Опыт внедрения DNSSEC
Опыт внедрения DNSSECОпыт внедрения DNSSEC
Опыт внедрения DNSSEC
 
Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)Где живут Ваши объявления / Тюрин Михаил (Avito)
Где живут Ваши объявления / Тюрин Михаил (Avito)
 
05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколы05 - Web-технологии. Сетевые протоколы
05 - Web-технологии. Сетевые протоколы
 
Microsoft cluster systems ritconf
Microsoft cluster systems ritconfMicrosoft cluster systems ritconf
Microsoft cluster systems ritconf
 
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
История успеха Яндекс.Почты с PostgreSQL / Владимир Бородин (Яндекс)
 
Devconf15
Devconf15Devconf15
Devconf15
 
Барнаул15
Барнаул15Барнаул15
Барнаул15
 
Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)Механика DDoS (Александр Крижановский)
Механика DDoS (Александр Крижановский)
 
Avito Stachka 2012
Avito Stachka 2012Avito Stachka 2012
Avito Stachka 2012
 
Lobanov_Cloud-Comput..
Lobanov_Cloud-Comput..Lobanov_Cloud-Comput..
Lobanov_Cloud-Comput..
 

Как мы сбежали от PostgreSQL или когда реляционная БД не справляется, Куманяев Андрей