具有非常大的数据集的关联表的合理查询时间是多少?

时间:2008-10-10 01:50:44

标签: database architecture query-optimization multi-tenant

StackOverflow播客中。 19 ,Joe描述了Fogcreek决定拥有一个数据库PER客户端而不是一个数据库用于所有客户端。这让我想到了以下几点。

  1. 假设我有 1000个用户
  2. 每位用户都有 100个客户
  3. 每个客户都有 1000个产品
  4. 这意味着我将拥有与用户相关联的 1000 x 100 x 1000 = 100,000,000 产品。现在,如果我为用户及其所有客户的产品进行连接表查询,如果我仅为此目的使用一个数据库,那么查询时间应该是多少呢?

    更新

    也许我的问题不够清楚。假设我需要使用上面描述的数据集进行各种时髦的查询(最小值,最大值,组等),它是否会变慢(或者不是),以便更有意义地拥有多个数据库策略,例如。 1个DB /客户端,数据库分片等

4 个答案:

答案 0 :(得分:1)

我认为答案取决于您选择的DBMS。例如,对于Oracle来说,一个大数据库绝对是可取的,事实上1000个相同的数据库将被认为是荒谬和无法管理的。

此外,您是否永远不需要跨用户运行查询?例如找到产品最多的用户。或者这些真的是1000个独立的“私有”数据库,没有人可以全面访问数据?即便如此,例如Oracle提供了“虚拟专用数据库”来满足单个数据库中的需求。

答案 1 :(得分:1)

每个客户一个数据库策略的主要原因是安全性和可管理性。虽然在单个数据库而不是100个客户端特定数据库上进行备份/恢复的概念确实可以让您获胜,但它有一些缺点。共享数据库的一些问题是:

  • 如果没有一些额外的安全措施(例如视图),用户无法直接报告数据库,以防止他们看到彼此的数据。对于敏感数据,这也成为合规性问题。

  • 整个应用程序必须了解安全模型,这会增加一定程度的复杂性。同样,对于敏感数据,这会产生合规性影响。

  • 涉及一个客户数据的系统维护或支持服务单任务存在错误会影响他人数据的风险。

多个数据库的固有划分简化了应用程序,并消除了整个错误类型,错误配置和安全问题。如果您构建应用程序以便它可以自动配置管理并部署到多个环境,那么即使在多个实例上也可以轻松维护。

此外,根据您所描述的数据量和报告类型,您可能最好建立某种报告子系统或数据集市,以便将报告移出生产服务器。这种分析报告在星型模式上比在事务数据库中使用的规范化模式的类型更有效。

答案 2 :(得分:0)

在大多数情况下,您应该将用户和/或客户端作为PK的一部分,因此您在多租户方案中的表现不应受到与单租户情况大不相同的影响。

答案 3 :(得分:0)

如果你想得到所有这些,所有列和行,没有过滤或聚合,那么你将不得不等待很长时间。我不认为你可以在这里使用任何合理的时间作为基准。你只需要等待:)

但是这些类型的查询很少发生(除非您正在迁移数据 - 仍有替代方案)。通常发生的是返回子集行,行页面,列选择或聚合。在这种情况下,“合理数量”取决于查询类型和涉及的计算。