Партицирование и миграции данных на примере postgresql,...

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

Upload: ontico

Post on 21-Jun-2015

662 views

Category:

Internet


10 download

DESCRIPTION

Доклад Дениса Иванова на HighLoad++ 2014.

TRANSCRIPT

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