1

我正在建立一种服务,一种社交网络,预计会吸引数万亿用户。这些用户将能够关注其他用户。对于这种情况,让我们假设我正在构建 Facebook。哈哈!

在每个用户的姓名旁边,将显示他拥有的关注者数量。就像是

SELECT COUNT(*) FROM users_vs_users 
  WHERE user_followed_id = 'xxx' GROUP BY user_followed;

会起作用,但是为每个页面重新加载并检查数万亿用户会杀死我的服务器。

num_of_followers在表中为每个用户命名一个字段是否合理,users每次关注或取消关注某人时都会更新该字段?

谢谢

4

3 回答 3

2

是的。实际上,出于性能原因,您正在反规范化。

于 2012-10-22T09:07:33.950 回答
2

我这里有另一种看法

一些数据库可以使用内存(加上磁盘同步),如 Oracle times 10 和 MySQL Cluster

仅将基于内存的数据库用于经常访问的数据通常会提供出色的性能,而只会使管理“计数”字段历史的麻烦

另一个重要提示,除非必须,否则永远不要优化,尝试预测未来几个月而不是几年的预期流量,然后您可以监控哪些查询实际上正在降低性能或进行过多的磁盘访问,然后您就可以了根据实际信息对表格进行反规范化,而不是猜测

于 2012-10-22T09:18:06.650 回答
1

在我看来,任何自尊的 DBMS 都应该在内部自行执行这样的优化。或者也许他们已经这样做了?COUNT(*) 真的很慢吗?我不知道。

无论如何,为什么不呢?只要确保“users_vs_users”和“users.num_of_followers”随时同步即可。

于 2012-10-22T09:08:06.930 回答