从我的角度来看,数据库始终是瓶颈。因为我可以将cpu能力扩展到任何需要的值。即使使用集群或复制,数据库资源也是有限的。在这里我可能是错的,但这些是我迄今为止使用云软件的经验。
所以我认为保持关系远离数据库将节省数据库资源,不是吗?
例如,如果您有一个users表和一个user_friends表。user_friends中的外键是users表的主键。所以如果我在用户表中有像ON DELETE这样的关系-> DELETE FROM user_friends…数据库将神奇地保持一致性并运行所有需要的查询。是不是更快,如果我的软件将运行两个简单的查询DELETE FROM users WHERE user_id…and DELETE FROM user_friends WHERE friend_id…
问题当然是不一致,但这难道不会降低DB负载吗?
在我看来,您应该使用独立的对象(行)而不是关系,这样您就不需要再使用任何复杂的查询了。除此之外,它将使缓存查询(服务器端和数据库端)变得容易得多。
为了防止不一致,您应该使用:
- 事务,所以所有'相关'数据对象被更新。
- 分片,所以你不需要垂直扩展你的数据库。水平方向更容易(大多数情况下)。
- 复制,所以当服务器宕机时,你的应用程序不会得到不一致。
所以,基本上,它可能更难编码,但它会给你一个更好的数据库设计,有一个令人难以置信的性能,这是非常可扩展的
顺便说一句。如果您考虑不使用关系,我建议您使用no-SQL-db。sql数据库很难扩展(与非sql数据库相比),并且在不使用关系时(也与非sql数据库相比)会导致很大的开销。