分布式表

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

数据表

表名说明
users用户信息
discussions讨论的话题

关系

  • discussions.user_id:由哪个用户发表的讨论
  • discussions.parent_id:所属的父讨论。如果为 0,则为一级讨论。
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

SELECT create_distributed_table('users', 'id');

分布式 discussions

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

特别注意!discussions 使用的是 user_id 作为分布式规则,而不是 id

示例数据

INSERT INTO users (email,nickname,password) VALUES
	('[email protected]', '张三','$2a$12$E/yEAZ4y0xAau2ACJnNQZObBIV1nI2c0s.mISYvfyhX7k7Uk4NMa2'),
	('[email protected]', '李四','$2a$12$NG4bwRBjCY63uIlULfS0zugZNdOfMsgGg8qMoDjQAh6xM8CDAaeCm'),
	('[email protected]', '王五','$2a$12$orKK2bwsy6tzgmk/ccyMOeJqi0ZZ2dPWDzsdtrnAzmD3OL4ljt0/u'),
	('[email protected]', '赵六','$2a$12$kTZVctim59ivCTpSr5VFA.1Ty1/vaM7z6Q8YDGgTqIRUyN2jfIj6e'),
	('[email protected]', '钱七','$2a$12$uU9Z6C/V8UO4wku9rJosBuqarU4nFQe.5M5lI.HEA3oPzztA5wcAK');


INSERT INTO discussions (user_id,parent_id,subject,content) VALUES 
	(1, 0, 'axum中文网', 'AXUM中文网(axum.rs)为你提供了企业级Web开发中所需要的大部分知识'),
	(2, 1, 'RE: axum中文网', '从基础知识到企业级项目的开发,都有完整的系列教程'),
	(3, 1, 'RE: axum中文网', '更难得的是,除了文字教程,我们还录制了配套的视频教程,方便你以多种形式进行学习'),
	(5, 0, 'RPC:实现Rust和Go进行跨语言调用', '本专题将讨论如何使用gRPC实现Rust和Go语言之间的跨语言调用'),
	(4, 0, 'axum使用SeaORM', '本专题将带你体验 SeaORM 和 axum 开发'),
	(5, 5, 'SeaORM简介', 'SeaORM 是一个关系型 ORM,用于帮助你像使用动态语言那样,在 Rust 中构建 Web 服务'),
	(3, 5, '使用 SeaORM 查询数据', '本章我们将讨论如何使用 SeaORM 进行查询:查询条件、分页、查询单条记录等');
要查看完整内容,请完成人机验证
升级为订阅用户,可关闭人机验证。