Php 为facebook风格的walling页面提高数据库性能
这是关于一个社交网站。让Facebook成为我们的榜样 mysql服务器中有一个表:“posts”用于保存所有post的预记录(为了简单起见,不包括注释)。其栏目包括: id、post、用户id、第一个id、第二个id id:主键,自动递增 帖子:写在墙上的帖子(无论是登录用户的帖子还是他/她的朋友的帖子) user_id:登录用户的id(假设为A) friend_id_1:登录用户的朋友(假设为B)。当A在B的墙上写字时,使用此字段 friend_id_2:登录用户的朋友的朋友(假设为C) A和B之间是否有任何消息对应关系,并相应地记录在mysql表中 假设B在C的墙上写了一些东西,那么B的朋友们会在他们各自的墙上看到。假设B有100个朋友。我们可以这样在上述表格中记录:frnd_id_2将用于记录C的id 如果frind_2有一个“0”记录,则消息对应关系仅在用户id和frnd_id_1之间,否则将意味着frnd_id_1已写在frnd_id_2的墙上,frind_id_1是用户id的朋友 到目前为止,我认为,一切都与FACEBOOK完全相似 但是- 假设B有100个朋友。在这种情况下,如果B写在C的墙上(假设所有隐私设置r对朋友的朋友开放)。如果采用上述策略,表中将有101条记录: 1) 一条记录仅仅意味着B已经张贴在C的墙上(frnd_id_2=0)。(让我们称之为主记录) 2) B的100个朋友的另外100条记录。(frnd_id_2!=0) 这就是我脑子里的想法。我可以通过在“post”列中插入(或将“post”列保留为空并创建另一个列,即“main_record_id”)来改进它,不是完整的消息,而是主记录的id 但问题是:对于单个post,需要执行101个db查询(在本例中)。还有其他方法可以提高数据库性能吗Php 为facebook风格的walling页面提高数据库性能,php,mysql,facebook,database-design,social-networking,Php,Mysql,Facebook,Database Design,Social Networking,这是关于一个社交网站。让Facebook成为我们的榜样 mysql服务器中有一个表:“posts”用于保存所有post的预记录(为了简单起见,不包括注释)。其栏目包括: id、post、用户id、第一个id、第二个id id:主键,自动递增 帖子:写在墙上的帖子(无论是登录用户的帖子还是他/她的朋友的帖子) user_id:登录用户的id(假设为A) friend_id_1:登录用户的朋友(假设为B)。当A在B的墙上写字时,使用此字段 friend_id_2:登录用户的朋友的朋友(假设为C) A
我使用PHP作为脚本语言。或一个数据库查询,它在一次网络往返中返回所有信息。我会将它们批处理到一个JOIN查询中 如果你想保存这些记录,你就不能不保存它们,但你可以控制如何访问它们
要记住的另一个想法是控制返回的结果集的大小。你真的需要同时拥有100个朋友吗?一次十个你能做得好吗?当您有1000或10000条记录要返回时,这将变得特别重要 一个简短的回答:不要将MYSQL用于类似于facebook的wall——这对于这样的目的是非常无效的 不使用sql数据库,例如MongoDB。我保证你会惊讶地发现,对于使用不同对象的实时新闻源来说,它是多么方便
您还可以组合两个DBs:MongoDB用于newsfeed,MySQL用于其他任何内容。为什么要使用负标记?有什么解释吗?一开始我误解了这个问题。别担心。你不能取消-ve评级吗?现在我想我不想了。除非有足够多的人同意我的意见,你的问题应该结束,否则你不会受到惩罚。不要再担心了。1个数据库查询可以在一次网络往返中返回所有信息。我会把它们分批放到一个加入查询中。“请解释一下,因为我不明白。”。要加入哪些表格?”一次处理10条记录也可以,剩下的90条记录何时处理?第一条记录是Google for SQL JOIN。我假设用户和朋友或用户和帖子之间存在一对多的关系。剩下的90条记录怎么办?首先,编写查询以便不返回它们。第二,为用户提供一个“next10”链接,这样他们就可以获得记录11-20、21-30等等。我知道SQLJoin。对于所有用户,墙中的帖子将存储在一个表中。那么要加入哪些表呢?至于90条记录,我并不是说一次显示墙上的所有帖子。相反,当B在C的墙上写东西时,对于B拥有的100条Firnd,需要将100条记录插入数据库中,以便100个朋友在查看墙壁时可以在墙上看到它们。“100条记录”是关于在墙上显示这些记录的,我想@duffymo试图说,与其插入100条记录,不如只插入一条,然后根据你的朋友使用“加入”在墙上显示帖子。换句话说,规范化数据库你能帮助规范化这里所述的表吗?在这种情况下,应该做些什么来规范化db(插入101查询)?