1. pgpool 2
2. gridsql
这是使用分片的更好方法
也可以在不改变客户代码的情况下进行分割
如果有人可以分享如何设置和使用分片的简单教程或食谱示例,那将是很棒的
答案 0 :(得分: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);
然后需要使用规则或触发器将数据放入正确的表中。 批量更新的规则更快,单个更新上的触发器更容易维护。这是一个示例触发器。
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。
答案 1 :(得分:17)
好吧,如果问题是关于分片,那么pgpool和postgresql分区功能都不是有效答案。
分区假设分区位于同一服务器上。 分片更为通用,通常在数据库在多个服务器上拆分时使用。当不再可能进行分区时使用分片,例如,对于无法放在单个磁盘上的大型数据库。
对于真正的分片,Skype的pl /代理可能是最好的。
答案 2 :(得分:5)
pl / proxy(通过Skype)是一个很好的解决方案。它要求您通过功能API访问,但是一旦拥有它,它就可以使它非常透明。
答案 3 :(得分:0)
实现PostgreSQL集群的最佳做法是使用:
替代方案:Postgres-XL
对于Sharding(负载均衡),您可以使用:
注意:强>
群集目的包含大数据集,主要用于数据仓库。
分片目的是负载均衡,主要用于高事务数据库。
** 警告 **
避免使用pgpool,因为太多的开销会导致将来出现问题。
希望这个答案能够帮助你在未来的发展中。