Партицирование и миграции данных на примере postgresql —...
TRANSCRIPT
Партицирование и миграции данных в PostgreSQL
Иванов Денис
Ведущий разработчик в 2ГИС
Крайний за высокие нагрузки сервиса «Фото»
8 стран 2 млн фирм
250 городов
50 млн
2000 RPS20 млн
1. ПАРТИЦИРОВАНИЕ
Окружение машины, на которой проводился бенчмарк: 8 CPU, 8GB RAM.
Мы не вывозим
Что делать?
photo
photo_1
photo_2
photo_N
Ok, Google,«PostgreSQL-партицирование»
Концептhttps://wiki.postgresql.org/wiki/Table_partitioning
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).
Из коробкиhttp://www.postgresql.org/docs/9.3/static/ddl-partitioning.html
«PARTITION MAGIC»
Ускоряемся
WHERE category_id = N
FROM news_1
Ускорили в 3 раза
Профит
Профит● Системные таблицы (pg_indexes…).
Профит● Системные таблицы (pg_indexes…).
● Автоматические партиции.
Профит● Системные таблицы (pg_indexes…).
● Автоматические партиции.
● Без единой правки кода приложения.
Профит● Системные таблицы (pg_indexes…).
● Автоматические партиции.
● Без единой правки кода приложения.
● Ускорение в 3 раза.
Раздача слонов —https://github.com/2gis/partition_magic
2. МИГРАЦИИ
Yiic Migrate+
Phing
Мы теряем изменения в коде хранимых процедур
«MIGRAPTOR»
Поддерживает● Yii CDbConnection.● Нативные Yii миграции.● Схемы.● Хранимые процедуры.● Представления (view).● DDL.● DML.● Скрипты.● И другое.
Профит
Профит● Обёртка над Yiic Migrate (Yii 1).
Профит● Обёртка над Yiic Migrate (Yii 1).
● Дельты и миграции — код.
Профит● Обёртка над Yiic Migrate (Yii 1).
● Дельты и миграции — код.
● VCS (Git), версии.
Профит● Обёртка над Yiic Migrate (Yii 1).
● Дельты и миграции — код.
● VCS (Git), версии.
● Обновление при деплое.
Раздача слонов —https://github.com/2gis/migraptor