pgpool是日本人基于postgresql弄的一个分布式数据库集群中间件,如下是一个初步调研结果:
主要调研pgpool对分片表的处理。
1. 在分片表模式下,pgpool对于数据的分布只有2中选择:
要么作为分片表,被拆分到集群中的每一台机器上;
要么作为复制表,在集群的每一台机器上保存一份完整的数据;
集群中的所有业务表,只能上上面2种模式之一,否则会出错;
2. 被分片的表的分区规则通过写数据库函数来设定
分区列只能1列,且该值不能修改,否则会出现数据不一致
3. 被分片的表本身在pgpool中不支持高可靠和在线恢复
4. 在分表模式下,无法在线一致性备份
5. 在分片表模式下,事务语句中的查询语句与修改语句实际运行中不在一个事务
中
BEGIN;
INSERT INTO t(a) VALUES (1);
SELECT * FROM t ORDER BY a; <-- INSERT above is not visible from this SELECT statement
END;
6. 在分表模式下,分布式事务故障的数据一致性应该是无法保证,即可能出现部
分提交
手册原话如下:
A transaction cannot be rolled back if a query has caused an error on
some backends due to a constraint violation.
7. 在分布模式下不支持在线动态添加节点,任何对分片规则的修改都要重启
pgpool
8. 另外,虽然没看到2张分区表join的例子,看手册描述,pgpool应该支持跨节点
的join。
具体实现方法应该是(我看手册描述猜的)把其中一张表的涉及的数据扫出来
保存成系统表(以复制的形式存在于每个server上),然后再让剩下的表与该系统
表join。如涉及子查询,就递归迭代处理。
9. pgpool的复制表应该使用的是并行写,并且可能出现后端节点返回结果不一致
的情况。
参考: http://www.pgpool.net/docs/pgpool-II-3.3.3/doc/pgpool-en.html
转载请注明转自高孝鑫的博客
主要调研pgpool对分片表的处理。
1. 在分片表模式下,pgpool对于数据的分布只有2中选择:
2. 被分片的表的分区规则通过写数据库函数来设定
3. 被分片的表本身在pgpool中不支持高可靠和在线恢复
4. 在分表模式下,无法在线一致性备份
5. 在分片表模式下,事务语句中的查询语句与修改语句实际运行中不在一个事务
中
6. 在分表模式下,分布式事务故障的数据一致性应该是无法保证,即可能出现部
分提交
A transaction cannot be rolled back if a query has caused an error on
some backends due to a constraint violation.
7. 在分布模式下不支持在线动态添加节点,任何对分片规则的修改都要重启
pgpool
8. 另外,虽然没看到2张分区表join的例子,看手册描述,pgpool应该支持跨节点
的join。
保存成系统表(以复制的形式存在于每个server上),然后再让剩下的表与该系统
表join。如涉及子查询,就递归迭代处理。
9. pgpool的复制表应该使用的是并行写,并且可能出现后端节点返回结果不一致
的情况。
参考: http://www.pgpool.net/docs/pgpool-II-3.3.3/doc/pgpool-en.html
转载请注明转自高孝鑫的博客