2009-06-15 12 views
18

lo que es una buena forma de fragmento horizontal en PostgreSQL

1. pgpool 2 
2. gridsql 

que es una mejor manera de utilizar shardinglo que es una buena forma de fragmento horizontal en PostgreSQL

También es posible paritition sin cambiar código de cliente

sería muy bueno si alguien puede compartir un sencillo tutorial o ejemplo de libro de cocina cómo configurar y utilizar sharding

Respuesta

5

pl/proxy (por Skype) es un buen sol aplicación para esto. Requiere que su acceso sea a través de una función API, pero una vez que lo tiene, puede hacerlo bastante transparente.

19

PostgreSQL permite la creación de particiones de dos maneras diferentes. Uno es por rango y el otro por lista. Ambos usan herencia de tabla para hacer partición.
El particionamiento por rango, generalmente un rango de fechas, es el más común, pero la partición por lista puede ser útil si las variables que son la partición son estáticas y no sesgadas.

El particionamiento se realiza con la herencia de la tabla, por lo que lo primero que debe hacer es configurar nuevas tablas secundarias.

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); 

A continuación, se deben utilizar reglas o desencadenantes para soltar los datos en las tablas correctas. Las reglas son más rápidas en las actualizaciones masivas, desencadenan actualizaciones únicas y son más fáciles de mantener. Aquí hay un disparador de muestra.

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

y la función de disparo para hacer el inserto

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; 

Estos ejemplos son versiones simplificadas de la documentación de PostgreSQL para facilitar la lectura.

No estoy familiarizado con pgpool2, pero gridsql es un producto comercial diseñado para EnterpriseDB, una base de datos comercial que se basa en postgresql. Sus productos son muy buenos, pero no creo que funcione en postgresl estándar.

+0

Muy completo. +1. –

+2

GridSQL es GPL y funciona en postgres estándar. – David

16

Bueno, si la pregunta es sobre la fragmentación, entonces las características de partición pgpool y postgresql no son respuestas válidas.

El particionamiento asume que las particiones están en el mismo servidor. Sharding es más general y se usa generalmente cuando la base de datos se divide en varios servidores. Sharding se usa cuando el Partitioning ya no es posible, por ejemplo, para una gran base de datos que no cabe en un solo disco.

Para la fragmentación verdadera, entonces el pl/proxy de Skype es probablemente el mejor.

0

mejor práctica para lograr clúster PostgreSQL está utilizando:

  1. partición PostgreSQL (rango o lista).
  2. Combina la partición y el espacio de tabla PostgreSQL en varios discos SSD.
  3. Extensión PostgreSQL FDW.

alternativos: Postgres-XL

Para Sharding (LoadBalance) que puede utilizar:

  1. Postgres-BDR
  2. Postgres-X2

Nota:

El propósito del clúster es contener gran conjunto de datos y principalmente para el almacén de datos.

El propósito de sharding es para loadbalance y se usa principalmente para high-transaction base de datos.

** ** ADVERTENCIA

evitar pgpool porque muchos gastos indirectos que llevará problema en el futuro.

Espero que esta respuesta lo ayude en el futuro desarrollo.

Cuestiones relacionadas