[英]Design for database
我有4个表: users
, posts
, categories
, categories_map
posts
具有id
, text
, category_id
categories_map
包含user_id
和category_id
我的目标是让用户可以预览队列。 同样,用户将能够跳过某些帖子或在其中编辑文本。 如果用户跳过了一个帖子,它将永远不会出现在队列中。 但是,用户无法更改顺序,因为cron将执行脚本。
我认为的第一种方法是创建一个包含user_id
, post_id
, text_modified
, is_skipped
, last_posted
。 因此,当执行cron作业时,它将留下一个时间戳,以便下次不会捕获该帖子,并且用户可以轻松更改该帖子的文本。
第二种方法是创建一个单独的表,在该表中将为用户user_id
, post_id
, category_id
, text_modified
生成队列。 因此,cron作业可以轻松地按照此表进行作业,并在完成后删除该行。 但是如果使用这种方法,如果我将拥有30个用户,平均每个用户包含5000个帖子的3个类别,那么我的表将已经有450000行。 是的,如果索引正确,应该一切都很好。 但是,当我有100-200个用户时,它可以扩展吗?
我应该采用哪种方法,或者还有其他解决方案?
很多事情取决于您的产品。 我们不知道:
说完所有这些未知数后,我将对其进行刺杀:
对于数据库大小,我认为您正在做一些预优化。 您应该考虑表格宽度。 由于您的表格非常狭窄(只有几列,主要是整数),因此您不必担心特定表格的长度。
当这成为一个约束时(您可以对其进行基准测试或等待查看特定服务器上的磁盘空间),可以通过轻松地对用户分片来扩展数据库。 您基本上将不同的用户放在不同的数据库服务器上。
说了这么多,请记住性能影响:
在这种情况下,您可能需要查看一些分布式缓存,例如Memcached,Redis。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.