【发布时间】:2020-10-18 17:36:37
【问题描述】:
标题不是很具体,所以我会详细说明。
我正在开发一个数据库系统,在该系统中,用户可以通过简化的 API 将数据添加到 postgres 数据库。
到目前为止,所有用户的数据都被编译到一个表中,结构类似这样:
CREATE TABLE UserData (
userId int NOT NULL,
dataId int NOT NULL PRIMARY KEY,
key varchar(255) NOT NULL,
data json not NOT NULL,
);
但是,我认为给每个 userId 提供它自己的表可能更有效(并且查询更快):
CREATE TABLE UserData_{userId} (
dataId int NOT NULL PRIMARY KEY,
key varchar(255) NOT NULL,
data json not NOT NULL,
);
CREATE TABLE UserData_{anotherUserId} ();
etc...
不过,我担心这会阻塞数据库。
每种方法的优缺点是什么?在什么样的负载/速度要求下都能很好地发挥作用?您认为哪一个更适合高负载、高速的场景?
【问题讨论】:
-
一般来说,拥有很多“相同”的表是明智的。这是一个维护问题,等等。
-
@RickJames 我认为您的评论中有错字,您的意思是“这不明智”。
-
我会保留非分区表。除非有非常令人信服的理由,否则我不会以这种方式对数据进行分区。执行这样的分区可能会成为噩梦。编码和调试非常容易出错且成本高昂。
-
TL/TR:保留您当前的设计
标签: postgresql database-design query-performance