2010-07-29 93 views
9

我正在设计一个应用程序,它涉及用户在Twitter上意识到彼此的活动,但我对数据库/查询设计/效率不是很熟悉。是否有最佳的管理方法,避免陷阱等?我收集这可以创建一个非常大的负载数据库如果不正确(或者甚至呢?)。'追随者'和效率

如果它的确与众不同,很可能人们会“关注”只有相对少数人(但一个人可以有很多的追随者)。然而,这并不确定,我不想指望它。

任何建议感激地收到。谢谢。

回答

6

非常简单,容易做到全normalisation。如果你有一个用户表,每个用户都有一个唯一的ID,那么你将得到一个TABLE_FOLLOWERS表,其中列和FOLLOWERID将描述每个用户的所有追随者作为一对一或多对多的关系。

即使有百万assosciations半像样的数据库服务器上,你使用的是良好的数据库(即不是MS-访问),这将只要执行好,快。

+0

我知道它已经很长,我想知道'FOLLOWERID'would存储多个值? – lazyprogrammer 2013-04-30 13:57:01

1

这取决于您期望需要支持多少用户;您期望用户拥有多少追随者;以及如果你对前面问题的回答证明乐观,你期望获得什么样的资金/发展努力。

对于小规模项目,我可能会忽略数据库,将该应用程序设计为简单对象模型,其中User对象保持List[followers]。将它全部保存在RAM中以便正常运行,并使用ORM定期保存到数据库(可能是postgresql或mysql)。

对于较大的项目,我根本不会使用关系数据库;但正是我所用的取决于项目的具体细节。

如果您只是试图激发这个概念,请使用ORM方法;但是,请记住它不会缩放。

+0

你介意在RAM对象存储的一些介绍材料的方向指向我吗?特别是我们在谈论什么技术?像Redis的东西? – Chris 2010-07-29 12:07:19

+0

对于秒杀我实际上是指直接在RAM中维护简单的数据结构。假设有100,000个用户,平均有100个关注者,每个用户有一个简单的〜100个字节的对象,并且4个字节的引用只需要约40MB的跟随者图和10MB的用户DB。即使是3倍的索引开销,这很容易就可以放入RAM中,并且不会给数据库带来太多困难。 – Recurse 2010-07-29 12:46:41

4

该模型非常简单。问题在于订购表的大小;如果有100万个用户,并且每个订阅1000个,那么订阅表具有10亿行。

alt text http://www.damirsystems.com/dp_images/follower_model.png

+0

漂亮的图。谢谢。 – user749665 2014-04-13 17:38:22

+0

@Damir ..你能解释你图中“EnableSubscription”的含义吗?这是一个布尔?这种方式应该如何工作,跟随并跟着回来?为什么使用bool?不能只使用数据透视表并将用户ID作为User和Follower引用?该EnableSubcription用于禁止用户关注你? – Chriz74 2016-04-20 17:00:35