从Postgresql迁移到Postgres-XL:分布式表设计
发布时间:2020-12-13 16:07:19 所属栏目:百科 来源:网络整理
导读:由于数据量的原因,我需要扩展我们的应用程序数据库.它在PostgreSQL 9.3上.所以,我发现PostgreSQL-XL并且它看起来很棒,但是我很难试图绕过分布式表的限制.通过复制(在每个datanode中复制整个表)来分发它们是完全可以的,但是假设我有两个大的相关表需要沿着数
由于数据量的原因,我需要扩展我们的应用程序数据库.它在PostgreSQL 9.3上.所以,我发现PostgreSQL-XL并且它看起来很棒,但是我很难试图绕过分布式表的限制.通过复制(在每个datanode中复制整个表)来分发它们是完全可以的,但是假设我有两个大的相关表需要沿着数据节点“分片”:
CREATE TABLE foos ( id bigserial NOT NULL,project_id integer NOT NULL,template_id integer NOT NULL,batch_id integer,dataset_id integer NOT NULL,name text NOT NULL,CONSTRAINT pk_foos PRIMARY KEY (id),CONSTRAINT fk_foos_batch_id FOREIGN KEY (batch_id) REFERENCES batches (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE CASCADE,CONSTRAINT fk_foos_dataset_id FOREIGN KEY (dataset_id) REFERENCES datasets (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE CASCADE,CONSTRAINT fk_foos_project_id FOREIGN KEY (project_id) REFERENCES projects (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE CASCADE,CONSTRAINT fk_foos_template_id FOREIGN KEY (template_id) REFERENCES templates (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE CASCADE,CONSTRAINT uc_foos UNIQUE (project_id,name) ); CREATE TABLE foo_childs ( id bigserial NOT NULL,foo_id bigint NOT NULL,ffdata hstore,CONSTRAINT pk_ff_foos PRIMARY KEY (id),CONSTRAINT fk_fffoos_batch_id FOREIGN KEY (batch_id) REFERENCES batches (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE CASCADE,CONSTRAINT fk_fffoos_foo_id FOREIGN KEY (foo_id) REFERENCES foos (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE CASCADE,CONSTRAINT fk_fffoos_template_id FOREIGN KEY (template_id) REFERENCES templates (id) MATCH SIMPLE ON UPDATE NO ACTION ON DELETE CASCADE ); 现在,Postgres-XL文档指出: >“(…)在分布式表中,UNIQUE约束必须包括 他们的例子过于简单和稀疏,所以有人可以请使用DISTRIBUTE BY HASH()将DDL上面的两个表格用于postgres-XL吗? 或者可能建议其他扩展方式? 解决方法CREATE TABLE foos ( ... ) DISTRIBUTE BY HASH(id); CREATE TABLE foos_child ( ... ) DISTRIBUTE BY HASH(foo_id); 现在任何关于foos.id = foos_child.foo_id的连接都可以在本地推送完成. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |