"Когда стоит написать свою БД"
Олег КрасновСистемный Архитектор
2013 dev.it-portfolio.net
dev.it-portfolio.net 2
Что такое SEMrush
- Ведущий сервис анализа конкурентов- Позволяет узнать ключевые слова- Позволяет анализировать не только ваши
собственные данные- Сведения об бюджетах конкурентов на
продвижение в поисковиках- Данные о затратах на каждое конкретное
объявление и его содержимое
dev.it-portfolio.net 3
Как выглядит SEMrush
dev.it-portfolio.net 4
Картина пользователей
- Рядовые пользователи: более 300 тысяч- Крупные клиенты: более 50
- Интеграторы: более 100
dev.it-portfolio.net 5
Объёмы данных
- 90 миллионов слов- 10 языковых баз- > 2 миллиардов URL- 30% AdWords объявлений- 3 терабайта актуальных данных- 40 терабайт исторических данных
dev.it-portfolio.net 6
Характер данных
- Ключевые слова- Числовые данные- URL- Небольшие тексты объявлений
dev.it-portfolio.net 7
Хорошие примеры
- youtube.com : ~ 30 миллионов слов- wikipedia.org : ~ 20 миллионов слов- t-v-links.blogspot.com : 51 слово- tiffanytunes.com : 28 слов
dev.it-portfolio.net 8
Распределение данных
dev.it-portfolio.net 9
Как это было в 2009 году
- MySQL 5.0.76 для хранения посчитанных индексов по всем полям (MyISAM)
- Большие файлы для хранения текстовых данных
- PHP 5.2.x для объединения данных и отдачи отчётов
dev.it-portfolio.net 10
Что же стало понятно
Наличие прототипа – это прекрасно!
dev.it-portfolio.net 11
Но присутствовали проблемы
- Очень медленно строилось- Плохо масштабировалось- Для каждого столбца нужен был отдельный
индекс- Занимало излишнее место- Никто не понимал как это было написано
dev.it-portfolio.net 12
А чего же хотелось
- Быстрой отдачи данных- Асинхронной отдачи данных- Отказоустойчивости- Масштабируемости- Простоты
dev.it-portfolio.net 13
Может быть SQL
- MySQL : медленное построение- PostgreSQL : схожие проблемы- ORACLE : платный- MSSQL : чуждая среда
dev.it-portfolio.net 14
Может быть NoSQL
- Redis: первый коммит 22 марта 2009 года- MongoDB: первый релиз версии 9 декабря
2009 года (версия 0.0.3)- Hadoop (версия 0.19.2) – большое
количество серверов
dev.it-portfolio.net 15
А что же тогда
- Файловая система- Бинарные индексы- Текстовые файлы- Хорошая хэш-функция для поиска- Компактное хранение числовых данных
dev.it-portfolio.net 16
Пробы пера в файловых системах
- UFS2 + Soft Updates- EXT3(4)- ReizerFS 3- ZFS
dev.it-portfolio.net 17
Магия файловых систем
- Перелинковка- Устойчивость к потерям данных- Работа на уровне ядра- Стабильность- Простота- Возможность создания виртуальных
устройств
dev.it-portfolio.net 18
Как это строится
- Основной индекс строится во время сбора данных
- Агрегированные данные строятся после этого
- Параллельно строятся дополнительные индексы
- Затем строятся текстовые индексы
dev.it-portfolio.net 19
Как это хранится
- Индексы- Тексты- Ранки- Исходники
dev.it-portfolio.net 20
Что стало понятно в процессе
- Необходимо кэширование результатов- Часто запрашиваемые данные должны
лежать отдельно- Учёт пользователей должен быть отдельно
dev.it-portfolio.net 21
Как это отдаётся
- JSON- TCP сервер- Для числовых данных event сервера- Для текстового поиска и фильтров сервер
полнотекстового поиска
dev.it-portfolio.net 22
Что же там внутри
- C- UNIX way- Бинарный поиск- Деревья- Хэш таблицы
dev.it-portfolio.net 23
Как это хранилось раньше
Индексы
Текстовые данные
US
dev.it-portfolio.net 24
Как это хранится теперьiSCSI через внутренний сетевой интерфейс
dev.it-portfolio.net 25
А если будет много запросов
dev.it-portfolio.net 26
Чего мы достигли
- Производительности: количество обрабатываемых увеличилось на порядок с 3 до 30 миллионов запросов в сутки
- Гибкости: ввод в строй новых отчётов не сопряжён с непреодолимыми трудностями
- Простоты развёртывания- Простоты резервного копирования и
восстановления
dev.it-portfolio.net 27
Вспомогательные сервисы
- libevent + mmap- Sphinx- Python
dev.it-portfolio.net 28
Взгляд в будущее
- Новые отчёты- Исторические данные- Увеличение количества баз- Непрерывные обновления
dev.it-portfolio.net 29
Непрерывные обновления
- Слегка поменять технологию сбора- Написать одну утилиту- Удовлетворённо посмотреть на результат
dev.it-portfolio.net 30
Выводы из вышесказанного
- Стоит писать свою базу данных- Но если чётко известен объём задачи
dev.it-portfolio.net 31
Будьте на связи
Олег КрасновСистемный архитектор компании SEMrush
[email protected]+7 (962) 700-1771
dev.it-portfolio.net 32
Спасибо за внимание!