Что такое хороший способ горизонтального осколка в postgresql - PullRequest
18 голосов
/ 15 июня 2009

Что такое хороший способ горизонтального осколка в postgresql

1. pgpool 2
2. gridsql

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

также возможно разделение без изменения кода клиента

Было бы замечательно, если бы кто-нибудь смог поделиться простым примером учебника или поваренной книги о том, как установить и использовать шардинг

Ответы [ 4 ]

19 голосов
/ 18 июня 2009

PostgreSQL позволяет разделять двумя разными способами. Один по диапазону, а другой по списку. Оба используют наследование таблиц для создания разделов.
Разделение по диапазону, обычно диапазон дат, является наиболее распространенным, но разделение по списку может быть полезным, если переменные, являющиеся разделом, являются статическими и не перекошены.

Секционирование выполняется с помощью наследования таблиц, поэтому первое, что нужно сделать, это настроить новые дочерние таблицы.

CREATE TABLE measurement (
    x        int not null,
    y        date not null,
    z        int
);

CREATE TABLE measurement_y2006 ( 
    CHECK ( logdate >= DATE '2006-01-01' AND logdate < DATE '2007-01-01' )
) INHERITS (measurement);

CREATE TABLE measurement_y2007 (
    CHECK ( logdate >= DATE '2007-01-01' AND logdate < DATE '2008-01-01' ) 
) INHERITS (measurement);

Тогда для удаления данных в правильных таблицах необходимо использовать правила или триггеры. При массовых обновлениях правила работают быстрее, запускаются при отдельных обновлениях, а также проще в обслуживании. Вот пример триггера.

CREATE TRIGGER insert_measurement_trigger
    BEFORE INSERT ON measurement
    FOR EACH ROW EXECUTE PROCEDURE measurement_insert_trigger();

и триггерная функция для вставки

CREATE OR REPLACE FUNCTION measurement_insert_trigger()
RETURNS TRIGGER AS $$
BEGIN
    IF ( NEW.logdate >= DATE '2006-01-01' 
         AND NEW.logdate < DATE '2007-01-01' ) THEN
        INSERT INTO measurement_y2006 VALUES (NEW.*);
    ELSIF ( NEW.logdate >= DATE '2007-01-01' 
            AND NEW.logdate < DATE '2008-01-01' ) THEN
        INSERT INTO measurement_y2006m03 VALUES (NEW.*);
    ELSE
        RAISE EXCEPTION 'Date out of range.';
    END IF;
    RETURN NULL;
END;
$$
LANGUAGE plpgsql;

Эти примеры являются упрощенными версиями документации postgresql для удобства чтения.

Я не знаком с pgpool2, но gridsql - это коммерческий продукт, разработанный для EnterpriseDB, коммерческой базы данных, построенной поверх postgresql. Их продукты очень хороши, но я не думаю, что он будет работать на стандартном postgresl.

17 голосов
/ 13 марта 2011

Ну, если вопрос касается шардинга, то функции разбиения pgpool и postgresql не являются правильными ответами.

Partitioning предполагает, что разделы находятся на одном сервере. Sharding является более общим и обычно используется, когда база данных разбита на несколько серверов. Разделение используется, когда создание разделов больше невозможно, например, для большой базы данных, которая не помещается на одном диске.

Для настоящего шардинга скайп pl / proxy, вероятно, лучший.

5 голосов
/ 15 июня 2009

pl / proxy (по скайпу) - хорошее решение для этого. Требуется, чтобы ваш доступ осуществлялся через API функций, но, как только вы это сделаете, это может сделать его довольно прозрачным.

0 голосов
/ 29 января 2018

Лучшая практика для создания кластера PostgreSQL - это:

  1. Раздел PostgreSQL (диапазон или список).
  2. Объедините раздел PostgreSQL и табличное пространство в нескольких SSD.
  3. Расширение PostgreSQL FDW.

Альтернатива: Postgres-XL

Для шардинга (балансировки нагрузки) вы можете использовать:

  1. Postgres-BDR
  2. Postgres-X2

Примечание:

Назначение кластера содержит большой набор данных и в основном для хранилища данных.

Цель шардинга предназначена для балансировки нагрузки и в основном используется для базы данных с высокой транзакцией .

** ПРЕДУПРЕЖДЕНИЕ **

избегайте pgpool, потому что слишком много накладных расходов, что приведет к проблеме в будущем.

Надеюсь, этот ответ поможет вам в дальнейшем развитии.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...