51
Партицирование и миграции данных в PostgreSQL Иванов Денис

Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

  • Upload
    2-

  • View
    232

  • Download
    4

Embed Size (px)

Citation preview

Page 1: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

Партицирование и миграции данных в PostgreSQL

Иванов Денис

Page 2: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

Ведущий разработчик в 2ГИС

Page 3: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

Крайний за высокие нагрузки сервиса «Фото»

Page 4: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС
Page 5: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС
Page 6: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС
Page 7: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС
Page 8: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС
Page 9: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС
Page 10: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

8 стран 2 млн фирм

250 городов

Page 11: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

50 млн

Page 12: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

2000 RPS20 млн

Page 13: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

1. ПАРТИЦИРОВАНИЕ

Page 14: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

Окружение машины, на которой проводился бенчмарк: 8 CPU, 8GB RAM.

Page 15: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

Мы не вывозим

Page 16: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

Что делать?

Page 17: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС
Page 18: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

photo

photo_1

photo_2

photo_N

Page 19: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

Ok, Google,«PostgreSQL-партицирование»

Page 20: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

Концептhttps://wiki.postgresql.org/wiki/Table_partitioning

Page 21: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

Status QuoCurrently we allow the user to (manually) create arbitrary nested tables with arbitrary constraints and then the planner tries to detect at run-time which child tables are candidates for the query. See PostgreSQL Partitioning for details. There are some 3rd party plugins that simplify the (manual) task/triggers, etc. see bottom of this page.

Today, at create time you create a master table, children that inherit from it (and how they are partitioned), separate indices for each child table, and create an insert trigger so that new rows are inserted to the appropriate (child) table (and/or more aggressive measures, such as allowing updates to the partitioned key [by default, updates to rows' partitioned key leave them in the same partition, possibly in error], dynamically allocating new child tables [be careful with race conditions], etc. see the various blogs out there).

Page 22: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

Из коробкиhttp://www.postgresql.org/docs/9.3/static/ddl-partitioning.html

Page 23: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС
Page 24: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС
Page 25: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

«PARTITION MAGIC»

Page 26: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС
Page 27: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС
Page 28: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

Ускоряемся

Page 29: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

WHERE category_id = N

Page 30: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

FROM news_1

Page 31: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС
Page 32: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС
Page 33: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

Ускорили в 3 раза

Page 34: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

Профит

Page 35: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

Профит● Системные таблицы (pg_indexes…).

Page 36: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

Профит● Системные таблицы (pg_indexes…).

● Автоматические партиции.

Page 37: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

Профит● Системные таблицы (pg_indexes…).

● Автоматические партиции.

● Без единой правки кода приложения.

Page 38: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

Профит● Системные таблицы (pg_indexes…).

● Автоматические партиции.

● Без единой правки кода приложения.

● Ускорение в 3 раза.

Page 39: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

Раздача слонов —https://github.com/2gis/partition_magic

Page 40: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

2. МИГРАЦИИ

Page 41: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

Yiic Migrate+

Phing

Page 42: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

Мы теряем изменения в коде хранимых процедур

Page 43: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

«MIGRAPTOR»

Page 44: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

Поддерживает● Yii CDbConnection.● Нативные Yii миграции.● Схемы.● Хранимые процедуры.● Представления (view).● DDL.● DML.● Скрипты.● И другое.

Page 45: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

Профит

Page 46: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

Профит● Обёртка над Yiic Migrate (Yii 1).

Page 47: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

Профит● Обёртка над Yiic Migrate (Yii 1).

● Дельты и миграции — код.

Page 48: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

Профит● Обёртка над Yiic Migrate (Yii 1).

● Дельты и миграции — код.

● VCS (Git), версии.

Page 49: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

Профит● Обёртка над Yiic Migrate (Yii 1).

● Дельты и миграции — код.

● VCS (Git), версии.

● Обновление при деплое.

Page 50: Партицирование и миграции данных на примере PostgreSQL — Денис Иванов, 2ГИС

Раздача слонов —https://github.com/2gis/migraptor