GithubHelp home page GithubHelp logo

2gis / partition_magic Goto Github PK

View Code? Open in Web Editor NEW
200.0 29.0 40.0 127 KB

Скрипт-сниппет для Postgresql на plpgsql, позволяющий лёгко, быстро и просто создавать партицированные таблицы в вашем проекте, а также изменять, добавлять и удалять данные.

PLpgSQL 100.00%

partition_magic's Introduction

Partition magic

Partition magic - скрипт-сниппет для Postgresql на plpgsql, позволяющий лёгко, быстро и просто создавать партицированные таблицы в вашем проекте, а также изменять, добавлять и удалять данные.

Без единой правки кода вашего приложения - вы можете "разбить" данные на партиции.

Как начать?

  1. Запустите данный скрипт в ваш Postgresql _2gis_partition_magic.sql - произойдёт установка
  2. Создайте базовую таблицу, которую вы собираетесь разбить на партиции, например:
CREATE SEQUENCE "news_id_seq" START WITH 1 INCREMENT BY 1 NO MINVALUE NO MAXVALUE CACHE 1;

CREATE TABLE news (
	  id BIGINT DEFAULT nextval('news_id_seq'::regclass),
	  category_id INT,
	  title TEXT,
	  data TEXT
	);
	ALTER TABLE ONLY "news" ADD CONSTRAINT "pk_news" PRIMARY KEY ("id");
  1. Из примера выше - мы будем партицировать таблицу новостей (news) по полю category_id
_2gis_partition_magic('news', 'category_id');
  1. ....
  2. PROFIT - это действительно так просто

Как пользоваться?

Пример можно посмотреть в файле _2gis_partition_magic_test.sql, а также вот краткий экскурс:

INSERT INTO news(category_id, title) VALUES (1, 'Item 1') RETURNING *;
INSERT INTO news(category_id, title) VALUES (2, 'Item 2') RETURNING *;
INSERT INTO news(category_id, title) VALUES (3, 'Item 3') RETURNING *;
INSERT INTO news(category_id, title) VALUES (4, 'Item 4') RETURNING *;
INSERT INTO news(category_id, title)
VALUES
(1, 'Item 5'),
(1, 'Item 6'),
(2, 'Item 7'),
(2, 'Item 8'),
(3, 'Item 9'),
(3, 'Item 10')
RETURNING *;

Данные автоматически попадут в нужные партиции, а если партиция еще не существовала - она будет создана автоматически. Можно проверить:

SELECT COUNT(*) FROM news;
SELECT COUNT(*) FROM news_1;
SELECT COUNT(*) FROM news_2;
SELECT COUNT(*) FROM news_3;
SELECT COUNT(*) FROM news_4;

А также, в основной таблице ничего нет:

SELECT * FROM ONLY test_table;

Домашнее задание: попробуйте UPDATE и DELETE

Что важно помнить?

Накатывайте изменения структуры только на основную таблице, после чего запускайте

_2gis_partition_magic('news', 'category_id');

Таблицы будут обновлены автоматически.

Что еще важно помнить?

Сам по себе partition magic не даёт ускорения при работе с таблицами. Вы можете не изменять ваш код, а работать также с основной таблицей, если вы пишите запросы такого вида:

SELECT * FROM news ...;
UPDATE news ...;
DELETE FROM news ...;

Будет происходить поиск по всем партициям, чтобы получить буст, выберите один из 2х вариантов:

  1. Укажите ваш constraint (в примере выше - category_id) в WHERE-условии, например:
SELECT * FROM news WHERE category_id = 1;
UPDATE news WHERE category_id = 1;
DELETE FROM news WHERE category_id = 1;

или так:

SELECT * FROM news WHERE category_id = 1 OR category_id = 2;
UPDATE news WHERE category_id = 1 OR category_id = 2;
DELETE FROM news WHERE category_id = 1 OR category_id = 2;

или так:

SELECT * FROM news WHERE category_id IN (1, 2);
UPDATE news WHERE category_id IN (1, 2);
DELETE FROM news WHERE category_id IN (1, 2);
  1. Укажите партицию, с которой вы работаете:
SELECT * FROM news_1 ...;
UPDATE news_2 ...;
DELETE FROM news_3 ...;

partition_magic's People

Contributors

vidog avatar wdevil avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

partition_magic's Issues

Ошибка при выполнении _2gis_partition_magic

Привет!

Создал таблицу - pages
В ней содержатся записи, принадлежащие разным сайтам (site_id)

Пытаюсь выполнить:
_2gis_partition_magic('pages', 'site_id');

Получаю ошибку:
ERROR: syntax error at or near "_2gis_partition_magic" LINE 1: _2gis_partition_magic('pages', 'site_id'); ^ Query failed PostgreSQL said: syntax error at or near "_2gis_partition_magic"

Postgres - 9.5.4

Сделать ключ text, а не только integer

Доброго дня. Возникла проблема, сделать партиции по коду страны, например ru, en, ua и тд, но в скрипте есть возможность использовать только int. Есть ли вариант это сделать? Заранее спасибо

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.