存储用户个人资料信息的最有效方式

时间:2013-12-01 09:00:30

标签: mysql ruby-on-rails database

好的,所以我准备好了我的用户表,其中包含所有技术信息的列,例如用户名,个人资料图片,密码等。现在我处于这样一种情况,我需要添加肤浅的个人资料信息,如位置,年龄,自我描述,网站,Facebook帐户,Twitter帐户,兴趣等。总计,我计算这将达到 12 新列,由于我的用户表已经有18列,我来到了一个十字路口。我读到的其他问题并没有真正给出最有效的方法的底线答案。

我需要找出是否有更有效的方式,存储此类信息的最有效方法是什么?基本假设是我的网站将来会有数百万用户,因此需要一个能够扩展的选项。

到目前为止,我总结了两种不同的选择:

选项1:将表面数据存储在用户表中,使用户表中的总列数最多为30个。

或者

选项2:将表面数据存储在单独的表中,并将其与Users表连接。

哪些具有更好的扩展能力?哪个更有效率?还有第三种选择比这两种选择更好吗?

如果有人有关于此的信息,还有一个特殊的额外问题;互联网上最大的网站如何处理这个问题?感谢任何参与答案的人,非常感谢。

我目前的数据库是在Rails 4中使用rails mysql2 gem的MySQL。

2 个答案:

答案 0 :(得分:0)

如果您需要经常访问这30列信息,可以将它们全部放在同一个表中。这就是一些广泛使用的CMS-es所做的事情,因为即使行很大,检索一个大行比在各种表上的大量小行(更多SQL请求,更多搜索,更多索引......)更快。 / p>

对于您的问题,一个很好的解读是Database normalization

答案 1 :(得分:0)

在你的情况下,我会选择第二个选项。我认为这会更有效,因为每当用户登录时你都会从table 1检索数据,并且每当你改变他的偏好时你都会使用来自table 2的数据(表面数据)。每次要执行某些操作时,您都不必检索所有数据。在底线,我建议根据您的使用场景(用例)建模您的数据,创建与您的用例实体匹配的数据实体(例如表格)。然后,您应该考虑数据库normalization原则。

如果您对世界上最大的网站如何处理这些问题感兴趣,您应该知道它们不使用关系(SQL)数据库。它们实际上使用NoSQL数据库,这些数据库在分布式函数上运行。这是一个比你更复杂的场景。如果您想查看相关工具,可以开始阅读Cassandrahadoop

希望我帮忙!