2017-03-19 197 views
10

我有4个表:userspostscategoriescategories_map设计数据库

postsidtextcategory_id
categories_map包含user_idcategory_id

我的目标是做一个队列中用户可以预览。此外,用户将能够跳过一些帖子或编辑文本。如果用户跳过帖子,它将永远不会出现在队列中。但是,用户无法更改序列,因为cron将执行脚本。

第一种方法,我认为是创建一个包含 user_idpost_idtext_modifiedis_skippedlast_posted表。所以当cron作业执行时,它会留下一个时间戳,所以下次这篇文章将不会被抓取,用户可以轻松地更改这篇文章的文本。

第二种方法是创建一个单独的表,其中将为用户user_id,post_id,category_id,text_modified生成队列。所以cron作业可以很容易地按照这个表格工作,并在完成后删除该行。但通过这种方法,如果我将有30个用户,平均每个类别包含5000个帖子,我的表格就会有450000行。是的,如果它被正确索引它应该是一切都好。但是当我拥有100-200个用户时,它可以扩展吗?

我应该去或有任何其他的解决方案,它的方法呢?

回答

6

很多事情取决于你的产品。我们不知道:

  1. 用户如何互相交互?
  2. 做他们的行动(跳过)需要被保留的,还是我们好,如果他们失去他们以上99.9个百分点。
  3. 他们对文章进行了文字修改,全局可见或仅对他们进行了修改。
  4. 用户是否按类别检查帖子?

说,所有这些未知数,我将它取刺:

  • 如果答案第4题是YES然后选择#2似乎更多声音从你的PK判断。
  • 如果答案第4题是NO然后选项#1似乎更多声音从你的PK判断。

对于数据库大小,我认为你正在做一些预优化。你应该考虑表格宽度。由于你的表格非常窄(只有几列,主要是整数),所以你不必太担心特定表格的长度。

时变成一个约束,(你可以以此为基准,或等着看特定的服务器上的磁盘空间),你可以在用户通过分片扩展数据库容易。你基本上把不同的用户放在不同的db服务器上

  • 注:问题1,将决定如何轻松上面会

说了这么多,记住的性能问题:

  1. 名单会得到很长。
  2. 如果用户修改会影响其他用户,那么您将必须执行相当多的扇出工作,才能将更新发布到特定队列。

在这种情况下,您可能需要查看一些分布式缓存,如Memcached,Redis。

  • 注:根据对问题的回答2 & 3,你可能甚至不需要持续的队列。
+0

1.用户不会互相交互2.跳过此帖后。它不会再出现他们了3.文本修改将只出现在他们的“墙上”(页面)4.不清楚这个问题。他们正在检查发布给他们的结果。 |如果我不需要坚持排队,我将如何拉动职位? – user256968

+0

在这种情况下,您的问题是一个典型的时间表/新闻源问题。有一个警告,用户需要编辑他们的墙(与全球职位分开)。你可以按照我的建议。分解数据库应该很容易。 –

+0

我想我没有让我的问题正确。之后我不关心时间线/新闻源。我只需要这个队列用于cron。该队列不会反映用户的任何内容。举个例子:用户选中了3个类别。总共将有100个队列或其他内容。 Cron会先选择并拨打一些电话给不同的API。所以在队列中只剩下99个等等。希望我现在更清楚 – user256968