2013-04-29 55 views
0

问题声明:我正在开发一个应用程序,其中用户可以关注其他用户(如Twitter或其他电子商务网站)并在墙上获得更新。与商家和用户的关系。用户可以跟随任何商家。用户自己可以是商家,所以实际上它就像一个用户跟随其他用户(许多许多实际情况)。使用PHP mysql水平扩展数据库

问题:去做最简单的方法是让这将有 ID(自动递增)结合表| follower_user_id | followed_user_id。但是我不确定数据库的垂直增长情况,它会如何扩展。如果用户跟随100人,那么对于单个用户将有100个条目。在这种情况下,如果我想获得任何用户的关注者,则需要更长的时间查询执行的时间。

研究:我想学习Twitter和其他网站和数据库设计,但它们使用不同的数据库,如基于图形的NoSQL等,以解决他们的problems.In我们的情况下,其Mysql.I还去有关使用的缓存机制,但我会想知道,如果有任何方法可以水平存储值,即每个用户都有一个单行的跟随者(逗号分隔将是我试过的单调乏味)。

我可以为此功能提供单独的数据库,如基于Nosql的数据库(mongo等)。它会对不同情况下的执行力产生什么影响?

如果我采用easiset方式进行操作的方法是正确的,那么如何提高5-10k用户的性能(现在查看一个小型基数)?基本mysql查询是否工作正常?

请帮助我输入相同。

+1

这与横向缩放无关;水平缩放是关于使用多个mysql服务器进行负载平衡 – 2013-04-29 09:56:26

+1

您是否已经完成了任何测试以查看数据库如何响应很多行?如果你使用索引,那么即使有数百万行,你仍然可以得到快速响应。使用模拟数据和查询进行测试是我处理这个问题的方式。 – gunnx 2013-04-29 09:57:29

+2

如果你在'follower_user_id'和'fol​​lowed_user_id'上索引,查询应该没问题。 MySQL可以处理数百万和数百万行。 – MatthewMcGovern 2013-04-29 09:58:10

回答

0

经过评论和做一些研究之后,我得出结论:最好的办法是创建关注者表并执行一些索引并使用缓存机制。

索引的建议复合指数将工作做好 对于缓存我打算使用内存缓存!

0

我使用的系统(我的个人偏好)是与追随者的ID和用户增加2列上的用户,followingfollowers和存储的简单加密的JSON数组在它被下..

唯一的缺点是,当查询你不得不解密它然后json_decode它,但它在我近2年来工作得很好。

+2

我个人不会推荐这个。由于您将同一条信息存储了两次,一次存储在用户A的“跟随者”中,一次存储在用户B的“跟随者”中,因此数据没有正常化。更不用说像发言这样的大型任务,除去流行的用户,将需要大量解码,删除ID,再次编码并重新插入数据库。而不只是'DELETE FROM关系,其中FollowerID = UserID' – MatthewMcGovern 2013-04-29 10:13:28

+1

使得很多困难,保持在你的数据的一致性,需要额外的工作,写2条记录,而不是一个只要有一个变化,更大的数据库容量等 – 2013-04-29 10:14:24

+2

正要给予类似MatthewMcGovern的完全相同的原因注释:D添加到这一事实,这一做法将使更复杂的查询困难得多(例如,如果将来你想知道“谁遵循商户X的人也跟着商人ÿ “)。保持你的数据原子可以更容易地进行操作和查询。 – Pudge601 2013-04-29 10:17:08