mysql - 在社交网络设计中使用外键——好/坏?

标签 mysql database-design schema social-networking

在我的模式中,我已经规范化了我的数据库并且到处都有 FK,因为社交网络中有如此多的链接关系,尤其是将用户链接到所有内容。

现在很明显,在社交网络中,性能会成败。这意味着“读取”时间比“写入”时间更重要。我的数据库是所有表都使用 InnoDB 的 MySQL。所以问题是:
1) 我假设我的阅读比写作更好的假设是社交网络所需要的?
2) 有许多 FK(我估计每个表中几乎 30% 的列都有 FK),这会影响读取性能或写入性能或两者兼而有之,还是不会?
3) 最好为每个表设置 2 组表 - 一组用于选择(读取),一组用于具有不同模式的插入(写入),以便可以相应地设计它们以获得更好的性能?
4) 如果我将 80% 的列设为 fks 有什么危害吗? (请记住,这是一个社交网络,以后可能会有很多流量,也可能不会)

最佳答案

1) I assume my assumption of better Read than write is what social netorks need?

通常,阅读内容的次数多于撰写内容的次数。但听起来您正在进行大量过早的优化。

2) having many FKs (i would estimate almost 30% of the columns in each table have FKs), would this effect Read performance or write performance or both or none?

声明外键与性能关系不大。

要么您的数据库已规范化,要么未规范化。在您知道遇到性能问题之前,不要试图打破规范化。

3) It is better to have 2 sets of tables for each table - one for Selects (Reads) and one for inserts (writes) with different schema so they can be designed accordingly for better performance?

您是在谈论实现 materialized views这里?听起来像是过早的优化 - 如果您认为它可能会使用 View 来访问当前的数据,那么请等到您知道您遇到了性能问题,然后再用物化 View 替换底层实体。

4) Any harm if i make say 80% of my colunms as fks? (keep in mind this is a social network which may or may not have lots of traffic later)

否 - 与上面的答案相同 - 规范化您的数据。声明您的 FK,等到出现性能问题后再尝试修复它。

关于mysql - 在社交网络设计中使用外键——好/坏?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4702521/

相关文章:

mysql - MariaDB: 'root' 和 '' 都没有权限(访问被拒绝 1044 和 1227)

database-design - 查找相关帖子的最佳算法是什么?

mysql - 数据库模式问题

sql - 使用长 varchar 键作为查找键的方法

mysql - 为什么 MySQL Workbench 在创建表之间的关系时会自动创建多个键?

php - 想要提取所有json数据并分配给字段

php - fetch() 在 while 循环内不起作用

mysql - 加入,尝试获取非对象的属性,->first,->firstorfail,->get()

android - 设计一个结构化数据库来聊天,一张表或多张表

mysql - 我应该将所有数据库表连接到基本用户,还是只连接 1 个?