SlideShare a Scribd company logo
MySQL:
Есть ли жизнь после
1млрд. записей?



                    Лаухин Роман
                        R&D Lead
         Global Fleet Management
О компании

Global Fleet Management Inc.
   #301 - 7 West 7th Avenue
     Vancouver, BC, Canada

    http://www.positrace.com
О компании
Проблема
Рост числа сообщений
Проблема
Рост числа сообщений

   ~0.9 млн. сообщений в сутки
Проблема
Рост числа сообщений

   ~0.9 млн. сообщений в сутки

   ~30 млн. в месяц
Проблема
Рост числа сообщений

   ~0.9 млн. сообщений в сутки

   ~30 млн. в месяц

   ~360 млн. в год
Проблема
Рост числа сообщений

   ~0.9 млн. сообщений в сутки

   ~30 млн. в месяц

   ~360 млн. в год

 + 15%
Проблема
На "вчерашний" день:

           rows       data size   idx size    total size

 GPS_log   1163.45M   105.94G     75.28G      181.21G
Проблема
На "вчерашний" день:

           rows       data size   idx size    total size

 GPS_log   1163.45M   105.94G     75.28G      181.21G

 Events    22.22M     2.17G       2.36G       4.53G

 Trips     16.02M     1.71G       1.62G       3.33G
Пути решения
Хранить точки как массив объектов
(JSON, Protobuf, etc)
Пути решения
Хранить точки как массив объектов
(JSON, Protobuf, etc)

плюсы:
  - контролируемый рост числа записей
Пути решения
Хранить точки как массив объектов
(JSON, Protobuf, etc)

плюсы:
  - контролируемый рост числа записей
  - информация о поездке в 1-2 записях
Пути решения
Хранить точки как массив объектов
(JSON, Protobuf, etc)

минусы:
    - много изменений в коде
Пути решения
Хранить точки как массив объектов
(JSON, Protobuf, etc)

минусы:
 - много изменений в коде
 - усложняется работа с точками
Пути решения
Использовать "Partitioning"
Пути решения
Использовать "Partitioning"

плюсы:

    - контролируемый рост
Пути решения
Использовать "Partitioning"

плюсы:

    - контролируемый рост

    - ускорение выполнения запросов
Пути решения
Использовать "Partitioning"

плюсы:

    - контролируемый рост

    - ускорение выполнения запросов

    - не требует изменений в коде
 (теоретически)
Пути решения
Использовать "Partitioning"

минусы:

    - ограничения, связанные с разделами
Пути решения
Использовать "Partitioning"

минусы:

    - ограничения, связанные с разделами

    - нет опыта
Пути решения
Использовать "Partitioning"

минусы:

    - ограничения, связанные с разделами

    - нет опыта

    - страшно :)
Реализация
Анализ ограничений
 (PK, FK)
Реализация
Анализ ограничений
 (PK, FK)

План разбиения на разделы
 (дата - ключевой параметр)
Реализация


ALTER TABLE ???
Реализация


ALTER TABLE !!!
Реализация
CREATE TABLE messages_new
.... PRIMARY KEY (id, dt) ...
PARTITION BY RANGE (TO_DAYS(dt))
( PARTITION p0801 VALUES LESS THAN
    (TO_DAYS('2008-02-01')),
  PARTITION p0802 VALUES LESS THAN
    (TO_DAYS('2008-03-01')),
  PARTITION p0803 VALUES LESS THAN
    (TO_DAYS('2008-04-01')),
...
  PARTITION p1212 VALUES LESS THAN (MAXVALUE));
Реализация
Копирование данных в новую таблицу.
Реализация
Копирование данных в новую таблицу.
    - внешним скриптом
    - малыми порциями
    (INSERT LOW_PRIORITY ...)
Реализация
RENAME TABLE
   messages TO messages_old,
   messages_new TO messages;
Реализация
Анализ первого опыта:
Реализация
Анализ первого опыта:
 - не без проблем
     (тестовое окружение != production)
Реализация
Анализ первого опыта:
 - не без проблем
     (тестовое окружение != production)
  - скорость выполнения запросов
     (возросла ~100 раз)
Реализация
Анализ первого опыта:
 - не без проблем
     (тестовое окружение != production)
  - скорость выполнения запросов
     (возросла ~100 раз)
     (связано с partitioning только косвенно)
Реализация
Повторили предыдущие шаги для GPS_log и
 связанных таблиц

Алгоритм известен -
    соли и специй добавить по вкусу :)
Реализация
Удаление старых таблиц
Реализация
Удаление старых таблиц

   DROP TABLE
Реализация
Удаление старых таблиц

   DROP TABLE
Реализация
Удаление старых таблиц

   - внешним скриптом
Реализация
Удаление старых таблиц

   - внешним скриптом
   - малыми порциями
    (DELETE LOW_PRIORITY)
Реализация
Удаление старых таблиц

   - внешним скриптом
   - малыми порциями
    (DELETE LOW_PRIORITY)
   - OPTIMIZE TABLE
    (в период с минимальной нагрузкой)
Реализация
Удаление старых таблиц

   - внешним скриптом
   - малыми порциями
    (DELETE LOW_PRIORITY)
   - OPTIMIZE TABLE
    (в период с минимальной нагрузкой)
   - DROP TABLE
Итоги
На сегодняшний день:


            rows       data size   idx size   total size

  GPS_log   1321.81M   94.11G      112.63G    206.74G
Итоги
Код, таки, пришлось менять :)
Итоги
Код, таки, пришлось менять :)

Ограничение по дате (dt) обязательно
Итоги
Код, таки, пришлось менять :)

Ограничение по дате (dt) обязательно

Не забывать расширять последний раздел
Итоги
Код, таки, пришлось менять :)

Ограничение по дате (dt) обязательно

Не забывать расширять последний раздел

Помнить про файловую систему
Полезности


EXPLAIN PARTITIONS ....
Полезности


EXPLAIN PARTITIONS ....


id   select_type   table   partitions   type   ....   Extra

1    SIMPLE        l       p0xx,p1202   ALL    ...    Using where; Using filesort
Полезности
INFORMATION_SCHEMA - наш друг
Полезности
INFORMATION_SCHEMA - наш друг

SELECT concat(table_schema,'.',table_name),
    concat(round(table_rows/1000000,2),'M') rows,
    concat(round(data_length/(1024*1024*1024),2),'G') DATA,
    concat(round(index_length/(1024*1024*1024),2),'G') idx,
    concat(round((data_length+index_length)/(1024*1024*1024),2),'G')
   total_size,
    round(index_length/data_length,2) idxfrac
FROM information_schema.TABLES
ORDER BY data_length+index_length DESC LIMIT 20;
Полезности
INFORMATION_SCHEMA - наш друг

  name      rows       data      idx       total

  table_1   1329.84M   94.29G    112.84G   207.13G

  table_2   1314.38M   105.94G   75.28G    181.21G

  table_3   221.73M    34.86G    17.09G    51.96G

  table_4   161.92M    13.02G    10.19G    23.21G

  table_5   8.07M      18.58G    0.16G     18.74G
Вопросы?
Ресурсы



MySQL 5.1 Reference Manual :: 18 Partitioning

http://dev.mysql.com/doc/refman/5.1/en/partitioning.html

More Related Content

PDF
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Nikolay Samokhvalov
 
PDF
Хранение данных на виниле / Константин Осипов (tarantool.org)
Ontico
 
PDF
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
Ontico
 
PDF
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
Ontico
 
PPTX
Что такое Postgresql (Максим Богук)
Ontico
 
PDF
Лекция 10. Apache Mahout
Technopark
 
PPTX
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Ontico
 
PDF
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Ontico
 
Промышленный подход к тюнингу PostgreSQL: эксперименты над базами данных
Nikolay Samokhvalov
 
Хранение данных на виниле / Константин Осипов (tarantool.org)
Ontico
 
PostgreSQL: практические примеры оптимизации SQL-запросов / Иван Фролков (Po...
Ontico
 
NoSQL внутри SQL: приземленные вопросы практического применения / Дмитрий До...
Ontico
 
Что такое Postgresql (Максим Богук)
Ontico
 
Лекция 10. Apache Mahout
Technopark
 
Разработка real-time приложений с RethinkDB / Илья Вербицкий (Независимый кон...
Ontico
 
Принципы и приёмы обработки очередей / Константин Осипов (Mail.ru)
Ontico
 

What's hot (20)

PDF
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
Ontico
 
PPTX
Аналитическая инфраструктура оптимизации рекламной сети (Александр Зайцев)
Ontico
 
PPTX
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Ontico
 
PDF
Aлександр Зайцев, LifeStreet
Ontico
 
PPTX
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Ontico
 
PPTX
MyRocks: табличный движок для MySQL на основе RocksDB
Sergey Petrunya
 
PDF
HBase inside
Anatoliy Nikulin
 
PPTX
Mysql vs postgresql
Daniel Podolsky
 
PDF
Лекция 12. Spark
Technopark
 
PPTX
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
Ontico
 
PPTX
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
Ontico
 
PPTX
django-and-postgresql
Oleg Churkin
 
PPT
Efficiency vvv
Michael Karpov
 
PDF
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Ontico
 
PDF
Oracle exa2 biz_summit
Nick Turunov
 
PDF
Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"
Yandex
 
PDF
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)
Ontico
 
PDF
Devconf2010 mariadb-extra-features
Sergey Petrunya
 
PPTX
#PostgreSQLRussia в банке Тинькофф, доклад №1
Nikolay Samokhvalov
 
PDF
Как мы храним 75 млн пользователей (Денис Бирюков)
Ontico
 
10 способов достижения HighLoad'а и BigData на ровном месте / Илья Космодемья...
Ontico
 
Аналитическая инфраструктура оптимизации рекламной сети (Александр Зайцев)
Ontico
 
Оптимизация работы с данными в мобильных приложениях / Святослав Иванов, Артё...
Ontico
 
Aлександр Зайцев, LifeStreet
Ontico
 
Apache Cassandra. Ещё одно NoSQL хранилище (Владимир Климонтович)
Ontico
 
MyRocks: табличный движок для MySQL на основе RocksDB
Sergey Petrunya
 
HBase inside
Anatoliy Nikulin
 
Mysql vs postgresql
Daniel Podolsky
 
Лекция 12. Spark
Technopark
 
Основные кейсы использования in-memory СУБД на примере Тарантула и проектов M...
Ontico
 
Длинная транзакция или когда размер имеет значение / Михаил Балаян (Odin — In...
Ontico
 
django-and-postgresql
Oleg Churkin
 
Efficiency vvv
Michael Karpov
 
Осваиваем Tarantool 1.6 / Евгений Шадрин (Sberbank Digital Ventures)
Ontico
 
Oracle exa2 biz_summit
Nick Turunov
 
Дмитрий Прокопцев "Memory-mapped storage: ещё один подход к сериализации данных"
Yandex
 
Использование очередей асинхронных сообщений с PostgreSQL (Илья Космодемьянский)
Ontico
 
Devconf2010 mariadb-extra-features
Sergey Petrunya
 
#PostgreSQLRussia в банке Тинькофф, доклад №1
Nikolay Samokhvalov
 
Как мы храним 75 млн пользователей (Денис Бирюков)
Ontico
 
Ad

Similar to MySQL: Есть ли жизнь после 1 млрд. записей. (20)

PDF
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Nikolay Samokhvalov
 
PDF
Олег Бартунов и Иван Панченко
CodeFest
 
PPT
SAMag2007 Conference: PostgreSQL 8.3 presentation
Nikolay Samokhvalov
 
PDF
Тонкости работы трассирующего JIT-компилятора / Антон Солдатов (IPONWEB)
Ontico
 
PPTX
migrate Oracle Database from RISC platform to x86 with minimal downtime
IgorMelnikov6
 
PPTX
High Load 2009 Dimaa Rus Ready
HighLoad2009
 
PPTX
Mastering Declarative Database Schema - MageConf 2019
Max Pronko
 
PDF
Максим Богук. Postgres-XC
PostgreSQL-Consulting
 
PPT
hl++ Rubtsov
Ontico
 
PDF
Всеволод Поляков "История одного мониторинга"
Fwdays
 
PDF
Deployment to production with an unexpected load
Grid Dynamics
 
PDF
Алексей Ильенко "In real-time with Apache Kafka"
Fwdays
 
PPTX
Программируем быстрее с CodeRush
geekfamilyrussia
 
PPTX
Big Data - первые шаги
Anton Gorokhov
 
PDF
Андрей Ситник
CodeFest
 
PDF
Time series data in a relational database. TimescaleDB and PipelineDB extensi...
Ivan Muratov
 
PDF
Партицирование и миграции данных на примере PostgreSQL, Денис Иванов (2ГИС)
Ontico
 
PPTX
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
Ontico
 
PDF
"Деплой кода процедур" Мурат Кабилов (Avito)
AvitoTech
 
PPTX
Антон Наумович - Контроль качества и сопровождение в реальном времени
COMAQA.BY
 
Эксперименты с Postgres в Docker и облаках — оптимизация настроек и схемы ва...
Nikolay Samokhvalov
 
Олег Бартунов и Иван Панченко
CodeFest
 
SAMag2007 Conference: PostgreSQL 8.3 presentation
Nikolay Samokhvalov
 
Тонкости работы трассирующего JIT-компилятора / Антон Солдатов (IPONWEB)
Ontico
 
migrate Oracle Database from RISC platform to x86 with minimal downtime
IgorMelnikov6
 
High Load 2009 Dimaa Rus Ready
HighLoad2009
 
Mastering Declarative Database Schema - MageConf 2019
Max Pronko
 
Максим Богук. Postgres-XC
PostgreSQL-Consulting
 
hl++ Rubtsov
Ontico
 
Всеволод Поляков "История одного мониторинга"
Fwdays
 
Deployment to production with an unexpected load
Grid Dynamics
 
Алексей Ильенко "In real-time with Apache Kafka"
Fwdays
 
Программируем быстрее с CodeRush
geekfamilyrussia
 
Big Data - первые шаги
Anton Gorokhov
 
Андрей Ситник
CodeFest
 
Time series data in a relational database. TimescaleDB and PipelineDB extensi...
Ivan Muratov
 
Партицирование и миграции данных на примере PostgreSQL, Денис Иванов (2ГИС)
Ontico
 
ObjectManager, или как работать с большим количеством объектов на карте, Мари...
Ontico
 
"Деплой кода процедур" Мурат Кабилов (Avito)
AvitoTech
 
Антон Наумович - Контроль качества и сопровождение в реальном времени
COMAQA.BY
 
Ad

More from MageCloud (20)

PPT
How to find the Right Mobile and Cloud Application Development Company for Yo...
MageCloud
 
PPT
First Steps to Mobile Sites and Apps
MageCloud
 
PDF
Optimizing Magento for Peak Performance
MageCloud
 
PPT
Cloud Based Business Application Development
MageCloud
 
PPTX
Three keys to successful banner ads
MageCloud
 
PPTX
Two Facets of Great e-Commerce: PPC and Landing Page Best Practices
MageCloud
 
PPT
Yii development
MageCloud
 
PPT
Testing
MageCloud
 
PPTX
Security testing
MageCloud
 
PPTX
Project lifecircle
MageCloud
 
PPTX
Management of projects
MageCloud
 
PPTX
Magento ecommerce
MageCloud
 
PPTX
Graphics
MageCloud
 
PPTX
Dotnet development
MageCloud
 
PPTX
Corporate structure project_team
MageCloud
 
PPTX
Continuous integration
MageCloud
 
PPTX
Clientside optimization
MageCloud
 
PPT
Automated testing
MageCloud
 
PPT
Amazon
MageCloud
 
PPTX
Agile
MageCloud
 
How to find the Right Mobile and Cloud Application Development Company for Yo...
MageCloud
 
First Steps to Mobile Sites and Apps
MageCloud
 
Optimizing Magento for Peak Performance
MageCloud
 
Cloud Based Business Application Development
MageCloud
 
Three keys to successful banner ads
MageCloud
 
Two Facets of Great e-Commerce: PPC and Landing Page Best Practices
MageCloud
 
Yii development
MageCloud
 
Testing
MageCloud
 
Security testing
MageCloud
 
Project lifecircle
MageCloud
 
Management of projects
MageCloud
 
Magento ecommerce
MageCloud
 
Graphics
MageCloud
 
Dotnet development
MageCloud
 
Corporate structure project_team
MageCloud
 
Continuous integration
MageCloud
 
Clientside optimization
MageCloud
 
Automated testing
MageCloud
 
Amazon
MageCloud
 
Agile
MageCloud
 

MySQL: Есть ли жизнь после 1 млрд. записей.