1

我正在设计一个 SQL 数据模式,其中包含许多具有复合主键的表(customer_id, id)。应用程序将经常需要运行JOIN查询来组合数据。但是,它不应该运行跨客户连接。(严格禁止跨客户加入可能是一个有用的安全功能,但业务需求可能会发生变化。)

我正在研究分布式 SQL 数据库。理想情况下,我想知道跨表的数据在同一个customer_id分片上存在,因此不需要跨分片执行连接。

我已经阅读了 Vitess、YugabyteDB 和 CockroachDB 的文档。在这三个中,我只相信 Vitess 会将来自同一客户的数据存储在同一节点上。

我错过了 YugabyteDB/CockroachDB 的一个特性吗?

4

2 回答 2

1

CockroachDB 不支持此处要求的并置表。这以前以交错表的形式得到支持,但最近被弃用了,因为实现难以维护并且没有像预期的那样产生显着的性能提升。如果您有兴趣了解更多信息,请在此 GH 线程https://github.com/cockroachdb/cockroach/issues/52009上详细讨论性能方面。

于 2022-01-04T19:01:36.240 回答
0

其中有两个方面:安全性和性能。对于安全性(租户隔离),如果您具有行级安全性,则不需要专用节点。这是 YugabyteDB 上的一个示例: https ://dev.to/yugabyte/hyper-scale-multi-tenant-for-saas-an-example-with-pgbench-33a3 对于性能(避免跨节点事务),您可以使用声明式分区在它之上。分区,就像在博客文章中创建的一样,可以通过云/区域/区域拓扑标记到特定节点

于 2022-01-04T14:36:24.820 回答