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