在高流量网站中规范化或非规范化

Ina*_*eel 8 performance database-design high-availability denormalization database-normalization

对于像stackoverflow这样的高流量网站,数据库设计和规范化的最佳实践是什么?

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

将规范化数据库设计为记录保存的主数据库以减少冗余并同时维护数据库的另一种非规范化形式以便快速搜索是否合理?

要么

主数据库是否应该非规范化,但在应用程序级别使用标准化视图来进行快速数据库操作?

或其他一些方法?

APC*_*APC 11

加入的性能经常受到高估.像Oracle这样的数据库产品可以非常有效地加入.当真正的罪魁祸首是糟糕的数据模型或糟糕的索引策略时,联接通常被认为表现不佳.人们还忘记了,在插入或更新数据时,非规范化数据库的表现非常糟糕.

要记住的关键是你正在构建的应用程序类型.大多数着名网站都不像常规企业应用程序.这就是Google,Facebook等不使用关系数据库的原因.最近有很多关于这个话题的讨论,我已经在博客上发表过.

因此,如果您正在构建一个主要关于提供半结构化内容的网站,您可能不希望使用关系数据库,非规范化或其他方式.但是,如果您正在建立一个高度交易的网站(例如在线银行),您需要一种能够保证数据安全性和完整性的设计,并且做得很好.这意味着至少是第三范式的关系数据库.


Bar*_*cat 5

对数据库进行非规范化以减少密集查询所需的连接数是许多不同缩放方式之一.不得不做更少的连接意味着数据库不那么繁重,磁盘也很便宜.

也就是说,对于荒谬的流量来说,良好的关系数据库性能可能难以实现.这就是为什么许多大型网站使用密钥值存储(例如memcached)和其他缓存机制.

容量规划的艺术非常好.

  • 磁盘空间很便宜,但磁盘性能肯定不是.与非规范化设计,则往往最终插入或上更宽的表更新数据的一个更大的体积,并且通常会导致性能问题. (4认同)