【问题标题】:Database for a web site builder网站建设者的数据库
【发布时间】:2013-06-30 00:53:38
【问题描述】:

想象一家公司允许人们使用他们的网络软件来构建网站。每个客户都有一个或多个他们建立的站点,每个站点可能包含一百个“单元”,这些单元包含站点各个部分的 HTML。我们确定每个单元格将仅用于一个站点。所以我们有:

现在我们需要描述每个站点中的单元格。

一种方法是创建一个巨大的(我的意思是巨大的)单元格表,其中包含一百万客户创建的所有单元格。然后每个单元格记录将指向使用它的 siteId。

但似乎应该有一种方法来利用这样的知识,即每个单元格只是其站点中大约一百个单元格中的一个,因此我们可以搜索一个包含 100 个单元格的表格,而不是搜索一个包含 1 亿个单元格的表格单元格,或者只是在我们要构建该站点时询问该表。

感谢您的意见。

【问题讨论】:

  • 您可以将公司特定的表保存在单独的数据库中。这样做的好处是如果他们去其他地方可以轻松删除它,并且它增加了更多的安全性以阻止 A 公司看到 B 公司的数据。然后,您可以拥有高级备份服务
  • 是的,这是我最初的想法,但现在我们拥有一百万个数据库!这合理吗?
  • 似乎很多。根据您的数据库,您可以添加一个聚集索引并将所有行添加到一个表中。您还需要一些应急计划,因为数据库故障会影响所有客户

标签: database database-design multi-tenant


【解决方案1】:

一种方法是有一个巨大的(我的意思是巨大的)单元格表 包含一百万客户创建的所有单元格。然后在每个 我们将指向使用它的 siteId 的单元格记录的行。

这可能是我要走的路线。当您使用适当的性能调优技术时,大多数现代数据库都可以处理具有数亿行的表。

我并不肯定,但听起来您正在考虑将每个站点的单元格放在一个站点特定的表格中,以尽量减少每个表格中的行数。如果这是真的,那么您似乎在尝试过度优化,以免出现任何性能问题。

此时我将专注于创建一个设计良好的规范化数据库,如果您遇到性能问题,我会回到这里来解决具体的性能问题。

【讨论】:

  • 是的,这就是我想要做的。考虑到当有人访问一个页面时,数据库将收到一个请求“给我从 1 亿个具有 siteID=5 的列表中的所有单元格”或“给我“SiteId_5_​​cell”表中的所有单元格。可能没有页面参数比加载时间更重要。(亚马逊发现他们每减少 100 毫秒页面加载时间,他们的收入就会增加 1%。)所以这就是我偏执的原因。如果我可以使用预建表节省数百毫秒,我会喜欢这样做。如果我们在谈论我们,我不会打扰。
猜你喜欢
  • 1970-01-01
  • 2019-06-25
  • 1970-01-01
  • 2011-03-17
  • 2021-01-22
  • 2017-04-11
  • 2015-01-25
  • 1970-01-01
  • 2023-03-24
相关资源
最近更新 更多