dev {highload}. when you should do your own db

32
"Когда стоит написать свою БД" Олег Краснов Системный Архитектор SEMrush [email protected] 2013 dev.it-portfolio.net

Upload: oleg-kwerty

Post on 27-Jul-2015

144 views

Category:

Documents


3 download

TRANSCRIPT

Page 1: Dev {highload}. When you should do your own db

"Когда стоит написать свою БД"

Олег КрасновСистемный Архитектор

[email protected]

2013 dev.it-portfolio.net

Page 2: Dev {highload}. When you should do your own db

dev.it-portfolio.net 2

Что такое SEMrush

- Ведущий сервис анализа конкурентов- Позволяет узнать ключевые слова- Позволяет анализировать не только ваши

собственные данные- Сведения об бюджетах конкурентов на

продвижение в поисковиках- Данные о затратах на каждое конкретное

объявление и его содержимое

Page 3: Dev {highload}. When you should do your own db

dev.it-portfolio.net 3

Как выглядит SEMrush

Page 4: Dev {highload}. When you should do your own db

dev.it-portfolio.net 4

Картина пользователей

- Рядовые пользователи: более 300 тысяч- Крупные клиенты: более 50

- Интеграторы: более 100

Page 5: Dev {highload}. When you should do your own db

dev.it-portfolio.net 5

Объёмы данных

- 90 миллионов слов- 10 языковых баз- > 2 миллиардов URL- 30% AdWords объявлений- 3 терабайта актуальных данных- 40 терабайт исторических данных

Page 6: Dev {highload}. When you should do your own db

dev.it-portfolio.net 6

Характер данных

- Ключевые слова- Числовые данные- URL- Небольшие тексты объявлений

Page 7: Dev {highload}. When you should do your own db

dev.it-portfolio.net 7

Хорошие примеры

- youtube.com : ~ 30 миллионов слов- wikipedia.org : ~ 20 миллионов слов- t-v-links.blogspot.com : 51 слово- tiffanytunes.com : 28 слов

Page 8: Dev {highload}. When you should do your own db

dev.it-portfolio.net 8

Распределение данных

Page 9: Dev {highload}. When you should do your own db

dev.it-portfolio.net 9

Как это было в 2009 году

- MySQL 5.0.76 для хранения посчитанных индексов по всем полям (MyISAM)

- Большие файлы для хранения текстовых данных

- PHP 5.2.x для объединения данных и отдачи отчётов

Page 10: Dev {highload}. When you should do your own db

dev.it-portfolio.net 10

Что же стало понятно

Наличие прототипа – это прекрасно!

Page 11: Dev {highload}. When you should do your own db

dev.it-portfolio.net 11

Но присутствовали проблемы

- Очень медленно строилось- Плохо масштабировалось- Для каждого столбца нужен был отдельный

индекс- Занимало излишнее место- Никто не понимал как это было написано

Page 12: Dev {highload}. When you should do your own db

dev.it-portfolio.net 12

А чего же хотелось

- Быстрой отдачи данных- Асинхронной отдачи данных- Отказоустойчивости- Масштабируемости- Простоты

Page 13: Dev {highload}. When you should do your own db

dev.it-portfolio.net 13

Может быть SQL

- MySQL : медленное построение- PostgreSQL : схожие проблемы- ORACLE : платный- MSSQL : чуждая среда

Page 14: Dev {highload}. When you should do your own db

dev.it-portfolio.net 14

Может быть NoSQL

- Redis: первый коммит 22 марта 2009 года- MongoDB: первый релиз версии 9 декабря

2009 года (версия 0.0.3)- Hadoop (версия 0.19.2) – большое

количество серверов

Page 15: Dev {highload}. When you should do your own db

dev.it-portfolio.net 15

А что же тогда

- Файловая система- Бинарные индексы- Текстовые файлы- Хорошая хэш-функция для поиска- Компактное хранение числовых данных

Page 16: Dev {highload}. When you should do your own db

dev.it-portfolio.net 16

Пробы пера в файловых системах

- UFS2 + Soft Updates- EXT3(4)- ReizerFS 3- ZFS

Page 17: Dev {highload}. When you should do your own db

dev.it-portfolio.net 17

Магия файловых систем

- Перелинковка- Устойчивость к потерям данных- Работа на уровне ядра- Стабильность- Простота- Возможность создания виртуальных

устройств

Page 18: Dev {highload}. When you should do your own db

dev.it-portfolio.net 18

Как это строится

- Основной индекс строится во время сбора данных

- Агрегированные данные строятся после этого

- Параллельно строятся дополнительные индексы

- Затем строятся текстовые индексы

Page 19: Dev {highload}. When you should do your own db

dev.it-portfolio.net 19

Как это хранится

- Индексы- Тексты- Ранки- Исходники

Page 20: Dev {highload}. When you should do your own db

dev.it-portfolio.net 20

Что стало понятно в процессе

- Необходимо кэширование результатов- Часто запрашиваемые данные должны

лежать отдельно- Учёт пользователей должен быть отдельно

Page 21: Dev {highload}. When you should do your own db

dev.it-portfolio.net 21

Как это отдаётся

- JSON- TCP сервер- Для числовых данных event сервера- Для текстового поиска и фильтров сервер

полнотекстового поиска

Page 22: Dev {highload}. When you should do your own db

dev.it-portfolio.net 22

Что же там внутри

- C- UNIX way- Бинарный поиск- Деревья- Хэш таблицы

Page 23: Dev {highload}. When you should do your own db

dev.it-portfolio.net 23

Как это хранилось раньше

Индексы

Текстовые данные

US

Page 24: Dev {highload}. When you should do your own db

dev.it-portfolio.net 24

Как это хранится теперьiSCSI через внутренний сетевой интерфейс

Page 25: Dev {highload}. When you should do your own db

dev.it-portfolio.net 25

А если будет много запросов

Page 26: Dev {highload}. When you should do your own db

dev.it-portfolio.net 26

Чего мы достигли

- Производительности: количество обрабатываемых увеличилось на порядок с 3 до 30 миллионов запросов в сутки

- Гибкости: ввод в строй новых отчётов не сопряжён с непреодолимыми трудностями

- Простоты развёртывания- Простоты резервного копирования и

восстановления

Page 27: Dev {highload}. When you should do your own db

dev.it-portfolio.net 27

Вспомогательные сервисы

- libevent + mmap- Sphinx- Python

Page 28: Dev {highload}. When you should do your own db

dev.it-portfolio.net 28

Взгляд в будущее

- Новые отчёты- Исторические данные- Увеличение количества баз- Непрерывные обновления

Page 29: Dev {highload}. When you should do your own db

dev.it-portfolio.net 29

Непрерывные обновления

- Слегка поменять технологию сбора- Написать одну утилиту- Удовлетворённо посмотреть на результат

Page 30: Dev {highload}. When you should do your own db

dev.it-portfolio.net 30

Выводы из вышесказанного

- Стоит писать свою базу данных- Но если чётко известен объём задачи

Page 31: Dev {highload}. When you should do your own db

dev.it-portfolio.net 31

Спасибо за внимание!

Page 32: Dev {highload}. When you should do your own db

dev.it-portfolio.net 32

Будьте на связи

Олег КрасновСистемный архитектор компании SEMrush

[email protected]+7 (962) 700-1771