7

针对高流量网站(如stackoverflow)进行数据库设计和规范化的最佳做法是什么?在高流量网站中规范化或非规范化

应该使用规范化数据库进行记录保存还是使用规范化技术或两者的组合?

是否合理设计一个规范化的数据库,作为记录保存,以减少冗余,同时保持数据库的快速搜索的另一种非标准化形式的主数据库?

如果主数据库中,但与快速的数据库操作应用水平标准化的观点非规范化?

或其他一些方法?

回答

5

的非规范化分贝,以减少联接需要强烈的查询次数是缩放的许多不同的方式之一。不得不做更少的连接意味着db的繁重程度降低,并且磁盘便宜。

这就是说,对于荒谬数额的交通良好的关系数据库的性能是很难实现的。这就是为什么许多大型网站使用关键值存储(例如memcached)和其他缓存机制。

The Art of Capacity Planning是相当不错的。

+4

磁盘空间很便宜,但磁盘性能肯定是没有的。使用非规范化设计时,通常最终会在更宽的表上插入或更新更大量的数据,这往往会导致性能问题。 – 2010-03-14 01:44:08

1

首先:确定自己是什么一块进行交通方式:每天

  • 50.000页,Viewss?
  • 每天500.000页面浏览量?
  • 5.000.000页面浏览量每天?
  • 更多?

比计算每分钟和每秒的pobalbe峰值页面浏览量。 之后,考虑你想要查询的数据每个页面视图。数据是否可缓存?数据的动态性如何,数据有多大?

分析您的个人需求,编写一些代码,进行一些负载测试,优化。在大多数情况下,在需要扩展数据库服务器之前,需要扩展Web服务器。

关系数据库就可以了,如果全面优化,速度快得惊人,在连接表时!

一个关系数据库可以很少打时,作为后端,来填充缓存或填补一些非规范化的数据表。我不会将违法化作为默认方法。

(你提到的搜索,看看如Lucene的或类似的东西,如果你需要全文搜索。)

最好的最佳实践的答案肯定是:这取决于 ;-)

0

对于我正在开发的项目,我们已经采用了非规范化表格路线,因为我们预计我们的主要表格将具有较高的写入读取比率(而不是所有用户击中相同的表格,我们已将它们非规格化并将每个“用户集”设置为使用特定的分片)。您可能会发现阅读http://highscalability.com/有关“大型网站”如何应对音量的示例 - 最近发布了Stack Overflow

10

加盟的表现受到高估。 Oracle等数据库产品的构建非常高效。当真正的罪魁祸首是一个糟糕的数据模型或糟糕的索引策略时,联盟往往被认为表现糟糕。人们也会忘记,在插入或更新数据时,非规范化数据库执行得非常糟糕。

要记住的关键是您正在构建的应用程序的类型。大多数着名的网站都不像常规的企业应用程序。这就是Google,Facebook等不使用关系数据库的原因。最近有很多关于这个话题的讨论,其中I have blogged about

所以,如果你建立一个网站,该网站主要是关于交付的半结构化内容shedloads你可能不希望使用关系数据库,去归一化或以其他方式为。但是,如果你正在建立一个高度交易的网站(比如在线银行),你需要一个保证数据安全性和完整性的设计,并且做得很好。这意味着至少有第三种正常形式的关系数据库。

0

如果您没有正确缓存,则无关紧要。