繁体   English   中英

数据库设计

[英]Design for database

我有4个表: userspostscategoriescategories_map

posts具有idtextcategory_id
categories_map包含user_idcategory_id

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

我认为的第一种方法是创建一个包含user_idpost_idtext_modifiedis_skippedlast_posted 因此,当执行cron作业时,它将留下一个时间戳,以便下次不会捕获该帖子,并且用户可以轻松更改该帖子的文本。

第二种方法是创建一个单独的表,在该表中将为用户user_idpost_idcategory_idtext_modified生成队列。 因此,cron作业可以轻松地按照此表进行作业,并在完成后删除该行。 但是如果使用这种方法,如果我将拥有30个用户,平均每个用户包含5000个帖子的3个类别,那么我的表将已经有450000行。 是的,如果索引正确,应该一切都很好。 但是,当我有100-200个用户时,它可以扩展吗?

我应该采用哪种方法,或者还有其他解决方案?

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

  1. 用户之间如何交互?
  2. 是否必须坚持他们的行动(跳过),或者如果他们在99.9个百分点以上失去他们的行为,我们可以吗?
  3. 是他们对帖子的文字修改,全局可见还是仅对他们可见。
  4. 用户是否按类别检查帖子?

说完所有这些未知数后,我将对其进行刺杀:

  • 如果问题4的答案为“是”,那么从您的PK来看,选项#2听起来更合理。
  • 如果问题4的答案为“ 否”,那么从您的PK来看,选项1听起来更合理。

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

当这成为一个约束时(您可以对其进行基准测试或等待查看特定服务器上的磁盘空间),可以通过轻松地对用户分片来扩展数据库。 您基本上将不同的用户放在不同的数据库服务器上。

  • 注意:问题1将决定上述操作的难易程度

说了这么多,请记住性能影响:

  1. 列表会变得很长。
  2. 如果用户修改影响其他用户,则您将不得不进行大量扇出工作,以将更新发布到特定队列。

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

  • 注意:根据对问题2和3的回答,您甚至可能不需要保留队列。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM