0
MySQL:Есть ли жизнь после1млрд. записей?                    Лаухин Роман                        R&D Lead         Global Fl...
О компании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.2...
ПроблемаНа "вчерашний" день:           rows       data size   idx size    total size GPS_log   1163.45M   105.94G     75.2...
Пути решенияХранить точки как массив объектов(JSON, Protobuf, etc)
Пути решенияХранить точки как массив объектов(JSON, Protobuf, etc)плюсы:  - контролируемый рост числа записей
Пути решенияХранить точки как массив объектов(JSON, Protobuf, etc)плюсы:  - контролируемый рост числа записей  - информаци...
Пути решенияХранить точки как массив объектов(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 L...
РеализацияКопирование данных в новую таблицу.
РеализацияКопирование данных в новую таблицу.    - внешним скриптом    - малыми порциями    (INSERT LOW_PRIORITY ...)
РеализацияRENAME TABLE   messages TO messages_old,   messages_new TO messages;
РеализацияАнализ первого опыта:
РеализацияАнализ первого опыта: - не без проблем     (тестовое окружение != production)
РеализацияАнализ первого опыта: - не без проблем     (тестовое окружение != production)  - скорость выполнения запросов   ...
РеализацияАнализ первого опыта: - не без проблем     (тестовое окружение != production)  - скорость выполнения запросов   ...
РеализацияПовторили предыдущие шаги для GPS_log и связанных таблицАлгоритм известен -    соли и специй добавить по вкусу :)
РеализацияУдаление старых таблиц
РеализацияУдаление старых таблиц   DROP TABLE
РеализацияУдаление старых таблиц   DROP TABLE
РеализацияУдаление старых таблиц   - внешним скриптом
РеализацияУдаление старых таблиц   - внешним скриптом   - малыми порциями    (DELETE LOW_PRIORITY)
РеализацияУдаление старых таблиц   - внешним скриптом   - малыми порциями    (DELETE LOW_PRIORITY)   - OPTIMIZE TABLE    (...
РеализацияУдаление старых таблиц   - внешним скриптом   - малыми порциями    (DELETE LOW_PRIORITY)   - OPTIMIZE TABLE    (...
ИтогиНа сегодняшний день:            rows       data size   idx size   total size  GPS_log   1321.81M   94.11G      112.63...
ИтогиКод, таки, пришлось менять :)
ИтогиКод, таки, пришлось менять :)Ограничение по дате (dt) обязательно
ИтогиКод, таки, пришлось менять :)Ограничение по дате (dt) обязательноНе забывать расширять последний раздел
ИтогиКод, таки, пришлось менять :)Ограничение по дате (dt) обязательноНе забывать расширять последний разделПомнить про фа...
ПолезностиEXPLAIN PARTITIONS ....
ПолезностиEXPLAIN PARTITIONS ....id   select_type   table   partitions   type   ....   Extra1    SIMPLE        l       p0x...
ПолезностиINFORMATION_SCHEMA - наш друг
ПолезностиINFORMATION_SCHEMA - наш другSELECT concat(table_schema,.,table_name),    concat(round(table_rows/1000000,2),M) ...
ПолезностиINFORMATION_SCHEMA - наш друг  name      rows       data      idx       total  table_1   1329.84M   94.29G    11...
Вопросы?
РесурсыMySQL 5.1 Reference Manual :: 18 Partitioninghttp://dev.mysql.com/doc/refman/5.1/en/partitioning.html
Upcoming SlideShare
Loading in...5
×

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

431

Published on

Роман Лаухин, Lead Software developer at Positrace.

0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
431
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
7
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

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

  1. 1. MySQL:Есть ли жизнь после1млрд. записей? Лаухин Роман R&D Lead Global Fleet Management
  2. 2. О компанииGlobal Fleet Management Inc. #301 - 7 West 7th Avenue Vancouver, BC, Canada http://www.positrace.com
  3. 3. О компании
  4. 4. ПроблемаРост числа сообщений
  5. 5. ПроблемаРост числа сообщений ~0.9 млн. сообщений в сутки
  6. 6. ПроблемаРост числа сообщений ~0.9 млн. сообщений в сутки ~30 млн. в месяц
  7. 7. ПроблемаРост числа сообщений ~0.9 млн. сообщений в сутки ~30 млн. в месяц ~360 млн. в год
  8. 8. ПроблемаРост числа сообщений ~0.9 млн. сообщений в сутки ~30 млн. в месяц ~360 млн. в год + 15%
  9. 9. ПроблемаНа "вчерашний" день: rows data size idx size total size GPS_log 1163.45M 105.94G 75.28G 181.21G
  10. 10. ПроблемаНа "вчерашний" день: 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
  11. 11. Пути решенияХранить точки как массив объектов(JSON, Protobuf, etc)
  12. 12. Пути решенияХранить точки как массив объектов(JSON, Protobuf, etc)плюсы: - контролируемый рост числа записей
  13. 13. Пути решенияХранить точки как массив объектов(JSON, Protobuf, etc)плюсы: - контролируемый рост числа записей - информация о поездке в 1-2 записях
  14. 14. Пути решенияХранить точки как массив объектов(JSON, Protobuf, etc)минусы: - много изменений в коде
  15. 15. Пути решенияХранить точки как массив объектов(JSON, Protobuf, etc)минусы: - много изменений в коде - усложняется работа с точками
  16. 16. Пути решенияИспользовать "Partitioning"
  17. 17. Пути решенияИспользовать "Partitioning"плюсы: - контролируемый рост
  18. 18. Пути решенияИспользовать "Partitioning"плюсы: - контролируемый рост - ускорение выполнения запросов
  19. 19. Пути решенияИспользовать "Partitioning"плюсы: - контролируемый рост - ускорение выполнения запросов - не требует изменений в коде (теоретически)
  20. 20. Пути решенияИспользовать "Partitioning"минусы: - ограничения, связанные с разделами
  21. 21. Пути решенияИспользовать "Partitioning"минусы: - ограничения, связанные с разделами - нет опыта
  22. 22. Пути решенияИспользовать "Partitioning"минусы: - ограничения, связанные с разделами - нет опыта - страшно :)
  23. 23. РеализацияАнализ ограничений (PK, FK)
  24. 24. РеализацияАнализ ограничений (PK, FK)План разбиения на разделы (дата - ключевой параметр)
  25. 25. РеализацияALTER TABLE ???
  26. 26. РеализацияALTER TABLE !!!
  27. 27. Реализация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));
  28. 28. РеализацияКопирование данных в новую таблицу.
  29. 29. РеализацияКопирование данных в новую таблицу. - внешним скриптом - малыми порциями (INSERT LOW_PRIORITY ...)
  30. 30. РеализацияRENAME TABLE messages TO messages_old, messages_new TO messages;
  31. 31. РеализацияАнализ первого опыта:
  32. 32. РеализацияАнализ первого опыта: - не без проблем (тестовое окружение != production)
  33. 33. РеализацияАнализ первого опыта: - не без проблем (тестовое окружение != production) - скорость выполнения запросов (возросла ~100 раз)
  34. 34. РеализацияАнализ первого опыта: - не без проблем (тестовое окружение != production) - скорость выполнения запросов (возросла ~100 раз) (связано с partitioning только косвенно)
  35. 35. РеализацияПовторили предыдущие шаги для GPS_log и связанных таблицАлгоритм известен - соли и специй добавить по вкусу :)
  36. 36. РеализацияУдаление старых таблиц
  37. 37. РеализацияУдаление старых таблиц DROP TABLE
  38. 38. РеализацияУдаление старых таблиц DROP TABLE
  39. 39. РеализацияУдаление старых таблиц - внешним скриптом
  40. 40. РеализацияУдаление старых таблиц - внешним скриптом - малыми порциями (DELETE LOW_PRIORITY)
  41. 41. РеализацияУдаление старых таблиц - внешним скриптом - малыми порциями (DELETE LOW_PRIORITY) - OPTIMIZE TABLE (в период с минимальной нагрузкой)
  42. 42. РеализацияУдаление старых таблиц - внешним скриптом - малыми порциями (DELETE LOW_PRIORITY) - OPTIMIZE TABLE (в период с минимальной нагрузкой) - DROP TABLE
  43. 43. ИтогиНа сегодняшний день: rows data size idx size total size GPS_log 1321.81M 94.11G 112.63G 206.74G
  44. 44. ИтогиКод, таки, пришлось менять :)
  45. 45. ИтогиКод, таки, пришлось менять :)Ограничение по дате (dt) обязательно
  46. 46. ИтогиКод, таки, пришлось менять :)Ограничение по дате (dt) обязательноНе забывать расширять последний раздел
  47. 47. ИтогиКод, таки, пришлось менять :)Ограничение по дате (dt) обязательноНе забывать расширять последний разделПомнить про файловую систему
  48. 48. ПолезностиEXPLAIN PARTITIONS ....
  49. 49. ПолезностиEXPLAIN PARTITIONS ....id select_type table partitions type .... Extra1 SIMPLE l p0xx,p1202 ALL ... Using where; Using filesort
  50. 50. ПолезностиINFORMATION_SCHEMA - наш друг
  51. 51. Полезности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) idxfracFROM information_schema.TABLESORDER BY data_length+index_length DESC LIMIT 20;
  52. 52. Полезности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
  53. 53. Вопросы?
  54. 54. РесурсыMySQL 5.1 Reference Manual :: 18 Partitioninghttp://dev.mysql.com/doc/refman/5.1/en/partitioning.html
  1. A particular slide catching your eye?

    Clipping is a handy way to collect important slides you want to go back to later.

×