Подтвердить что ты не робот

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

, что является хорошим способом горизонтального осколка в postgresql

1. pgpool 2
2. gridsql

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

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

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

4b9b3361

Ответ 1

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. Их продукты очень хорошие, но я не думаю, что он будет работать на стандартном постгресле.

Ответ 2

Хорошо, если речь идет о sharding, то функции pgpool и postgresql не являются корректными.

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

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

Ответ 3

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