gpt4 book ai didi

postgresql - 在 postgresql 中水平分片的好方法是什么

转载 作者:行者123 更新时间:2023-11-29 11:10:09 26 4
gpt4 key购买 nike

在postgresql中水平分片的好方法是什么

1. pgpool 2
2. gridsql

哪个是使用分片的更好方法

是否可以在不更改客户端代码的情况下进行分区

如果有人可以分享有关如何设置和使用分片的简单教程或食谱示例,那就太好了

最佳答案

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 设计的商业产品,EnterpriseDB 是一个建立在 postgresql 之上的商业数据库。他们的产品非常好,但我认为它不适用于标准的 postgresl。

关于postgresql - 在 postgresql 中水平分片的好方法是什么,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/994882/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com