performance - 为了性能而允许数据库中存在冗余数据

标签 performance database-design rating-system

假设您正在为下一次堆栈溢出设计数据库架构,更具体地说,是处理问题评级的架构部分。

我假设您会使用如下表格:
评分(question_id、user_id、评分)
...这将记录评分并确保没有用户对同一问题投票两次。

该表本身就可以处理评级数据,但可能会导致查询速度缓慢。

考虑到性能,您是否会考虑将每个问题的评分总和存储在问题表中,即使该数据是多余的,因为它是从评分表中的数据派生的?

最佳答案

我通常会首先从标准化模型开始,而不是对问题表中的评分总和进行非标准化。

然后,当应用程序运行得足够好时,我会进行一些性能测试,以确定应用程序是否足够好地处理负载 - 与我预期在生产中的负载相比。

如果它不能很好地处理负载,我会检查瓶颈 - 并纠正最重要的瓶颈,直到应用程序运行良好。

应用程序投入生产后,如果网站有大量 opf 用户,则需要进行一些额外的优化。


为了让事情变得简单:

  • 不要过度优化
  • 让您的应用程序正常运行
  • 一旦有效,就对其进行基准测试
  • 如果/需要时进行优化


最后,是的,也许,将问题表的评分总和非标准化可能会有所帮助;但你需要这样做吗?

这才是真正的问题;-)

关于performance - 为了性能而允许数据库中存在冗余数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2191774/

相关文章:

python - 按 django 中类似挖掘的评级排序

java - 在方法之间重用 PreparedStatement?

python - 从比赛结果到使用 Trueskill 进行评分(在 Python 中)

javascript - 如何有效地连接 Uint8Array?

javascript - SQL 多个多对多自引用关联 (Sequelize.js)

php - 创建用户登录系统 : Put logic in Code or Database

Django动态模型设计

css - Rails 3 Ajaxful_rating 样式问题

java - 是否有可能为 2^14 个音频帧实现 65 微秒 FFT?

c# - 快速计算传入数字的最小值、最大值和平均值