我正在构建一个 SaaS,在一个数据库中我将有一个大目标(大约 5000 万行),并且该表将为系统的所有客户提供信息。
但是,该 SaaS 将是一个多租户/多数据库软件,当客户注册时,我们将提供他自己的数据库来访问,并为数据库之外的大表创建一个 foreign_table...
问题 1:这是最好的方法吗?为每个客户创建一个外部表可能会导致服务器存储的大量使用?
问题2:原始表有10种其他索引(其中大多数是btree),并且使用客户的foreign_table,这些索引可以正常工作吗?
使用外表不会增加存储空间需求。外表看起来就像一张表,但您对其执行的任何操作都将重定向到远程表。这与数据库视图没有存储空间的方式非常相似。
由于您提供的信息很少,因此很难判断您的设置是否良好。请考虑外部表的以下含义:
对外部表的任何请求都将导致对数据所在的远程数据库的请求,因此,如果许多数据库都有相同数据的外部表,则可能会对存储数据的数据库造成一些压力
外部表上的任何请求都会导致对远程数据库的查询,因此您必须考虑数据库之间的网络延迟
如果保存数据的数据库不可用,则所有其他数据库上的外部表也将不可用
如果这是一个问题,您可以考虑使用逻辑复制来创建表的本地副本。