pyl*_*abs 18 postgresql partitioning sharding
1. pgpool 2
2. gridsql
Run Code Online (Sandbox Code Playgroud)
这是使用分片的更好方法
也可以在不改变客户代码的情况下进行分割
如果有人可以分享如何设置和使用分片的简单教程或食谱示例,那将是很棒的
Wol*_*gon 19
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);
Run Code Online (Sandbox Code Playgroud)
然后需要使用规则或触发器将数据放入正确的表中.批量更新的规则更快,单个更新上的触发器更容易维护.这是一个示例触发器.
CREATE TRIGGER insert_measurement_trigger
BEFORE INSERT ON measurement
FOR EACH ROW EXECUTE PROCEDURE measurement_insert_trigger();
Run Code Online (Sandbox Code Playgroud)
以及执行插入的触发器功能
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;
Run Code Online (Sandbox Code Playgroud)
这些示例是postgresql文档的简化版本,以便于阅读.
我不熟悉pgpool2,但gridsql是为EnterpriseDB设计的商业产品,EnterpriseDB是一个建立在postgresql之上的商业数据库.他们的产品非常好,但我认为它不适用于标准的postgresl.
小智 17
好吧,如果问题是关于分片,那么pgpool和postgresql分区功能不是有效的答案.
分区假定分区位于同一服务器上. 分片更为通用,通常在数据库在多个服务器上分割时使用.当不再可能进行分区时使用分片,例如,对于无法放在单个磁盘上的大型数据库.
对于真正的分片,Skype的pl /代理可能是最好的.
| 归档时间: |
|
| 查看次数: |
14543 次 |
| 最近记录: |