我正在做一个本地在线约会网站的下一个版本,PHP和MySQL为基础,我想做正确的事情。用户表相当庞大,随着新版本的推出,预计会有更大的增长,因为会有很多钱花在推广上。
目前的版本,我猜是7-8岁,可能是由一个对PHP和MySQL不太了解的人完成的,所以我必须从头开始。
那里的社区目前拥有200k+用户,预计在未来一到两年内将增长到500k-100万。每个用户的配置文件有100多个属性,我必须能够搜索至少30-40个属性。
正如您可以想象的那样,对于创建一个具有200k行和100列的表,我有点谨慎。我的前任将用户表一分为二...一个包含最常使用和搜索的列,另一个包含其余(和批量)列。但这会导致两个表之间出现很大的同步问题。
那么,你认为这是最好的方式吗?
发布于 2010-12-16 18:09:04
您可以做的是将用户数据拆分到两个表中。
1)表:用户
这将包含用户的“核心”固定信息,如名字、姓氏、电子邮件、用户名、role_id、registration_date和其他类似信息。
与配置文件相关的信息可以放在它自己的表中。这将是一个具有键=> val性质的无限可扩展的表。
2)表: user_profile
字段:user_id,选项,值
user_id: 1
选项: profile_image
取值: /uploads/12/myimage.png
和
user_id: 1
选项: questions_answered
取值: 24
希望这能帮到你,保罗。
发布于 2010-12-16 18:01:22
实体-属性-值模型可能非常适合您:
http://en.wikipedia.org/wiki/Entity-attribute-value_model
添加一个包含三列的表,而不是拥有100个不断增长的列:
user_id,property,value。
发布于 2010-12-16 19:17:43
通常,您不应该牺牲数据库完整性来换取性能。
为此,我要做的第一件事是创建一个包含100万行虚拟数据的表,并使用ab等压力工具测试其中的一些典型查询。它很可能会表现得很好--100万行对于mysql来说是小菜一碟。因此,在尝试解决问题之前,请确保您确实拥有它。
如果你发现性能很差,数据库真的是一个瓶颈,考虑一下一般的优化,比如缓存(从mysql查询缓存到html缓存),获得更好的硬件等等,这在大多数情况下应该是可行的。
https://stackoverflow.com/questions/4459466
复制相似问题