多列uuid主键?

时间:2019-07-19 14:23:17

标签: sql postgresql

我正在尝试设计表的最坏方法。这是一个PostgreSQL数据库,但我认为其他系统中的问题也会类似。

该数据库是多租户的,因此将包含来自一个uuid客户ID的几百个客户的数据。各个表格行由也是uuid的商品ID主键标识。这两个uuid都在数据库外部生成。查询将始终由特定的客户ID过滤。表中将有数百万行。

由于已开发商品ID为PK,因此,客户数据会随机分散到整个表中,从而影响性能。客户ID已建立索引。

将PK更改为多列(“客户ID”,“商品ID”)将意味着客户数据将在一起,但是作为PK的两个uuid似乎是疯狂的。可以将客户ID映射到int或其他类型,因此它更窄(客户映射,商品ID),但感觉并不好。

可能,生成商品ID的服务可能会生成种子uuid,其中供客户使用的uuid属于同一范围。然后,种子项目ID本身可以是PK,并且仍提供数据排序。虽然可以发现商品ID,所以真正的随机性很好。

在这里可以使用一个合理的结构吗?

1 个答案:

答案 0 :(得分:0)

有趣的情况。一种可能的解决方案是为每个客户端使用单独的数据库。这通常是由安全要求和数据分离驱动的。这样可以确保一个客户端看不到另一客户端的数据,即使他们对数据库具有完全访问权限。

根据您的情况,听起来您想按客户端对数据进行分区。这将每个表的每个客户端的数据分成其自己的数据存储(我很想说“文件”)。因此,给定客户端的数据将被并置。 Postgres查询通常足够聪明,只获取所需的分区。

分区是一个比较复杂的主题,所以我建议您阅读documentation

相关问题