分布式表

本章将通过一个讨论话题的示例来演示 citus 分布式表的设置。

数据表

表名说明
users用户信息
discussions讨论的话题
  • discussions.user_id:由哪个用户发表的讨论
  • discussions.parent_id:所属的父讨论。如果为 0,则为一级讨论。

普通SQL

CREATE TABLE users (
	id bigserial PRIMARY KEY,
	email VARCHAR(255) NOT NULL,
	nickname VARCHAR(50) NOT NULL,
	password VARCHAR(255) NOT NULL,
	created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
	is_del BOOLEAN NOT NULL DEFAULT FALSE
);

CREATE TABLE discussions(
	id bigserial NOT NULL,
	user_id bigint NOT NULL REFERENCES users (id),
	parent_id bigint NOT NULL DEFAULT 0,
	subject VARCHAR(255) NOT NULL,
	content TEXT NOT NULL,
	created_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
	updated_at TIMESTAMP WITH TIME ZONE DEFAULT CURRENT_TIMESTAMP,
	is_del BOOLEAN NOT NULL DEFAULT FALSE,
	PRIMARY KEY(user_id,id)
);

注意,由于 citus 分布式要求,discussions 的主键是 (user_id,id)

分布式规则

本例中,我们选用 users.id 字段作为分布式规则。

分布式 users

分布式 discussions

SELECT create_distributed_table('discussions', 'user_id');

示例数据

要查看完整内容,请先登录