【发布时间】:2021-05-11 23:13:31
【问题描述】:
我们有一个多租户系统,我们开始将其数据迁移到 CockroachDB。 我们经常需要跨多个表连接属于单个租户的数据。在更罕见的情况下,我们还会读取属于多个/所有租户的数据 - 但这种情况并不经常发生,因此从性能角度来看并不那么重要。
我们认为table interleaving 可能是一个很好的解决方案的一部分 - 即:有一个租户“父”表,然后将其他表交错到该表中,以增加属于同一表的机会数据租户最终在同一范围内。但是,这是否是一个好主意,现在都无关紧要了,因为交错已被弃用。
为每个租户创建单独的架构或数据库可能是一种解决方案。但由于我们已经为每个微服务提供了一个模式,这将导致模式的爆炸式增长(我们有成千上万的租户)。因此,一些带有“鉴别器”列的设计来告诉给定的数据行属于哪个租户是更可取的。
什么是好的设计,既好用又性能好?例如。将租户 ID 的复合键用作键的第一部分会有所帮助吗?我想这至少可以确保单个表中来自同一租户的数据彼此相邻,因此更有可能最终在同一范围内?但是,在跨表进行连接时,这无济于事(这是我期望交错来帮助的)。
【问题讨论】:
标签: performance database-design multi-tenant cockroachdb