有微博帖子和与之相关的投票/表情符号,它们都存储在MySQL innoDB表中。需要两种类型的页面:
(A) 列表页面,包含许多微博以及它们的投票数/表情符号数,显示在单个页面上(例如25条)。
例如:
THE GREAT FUNNY POST 不是很有趣的内容,但是在本意上应该是一个有趣的帖子。Lorem ipsum dolor sit amet, consectetur adipiscing elit。Phasellus euismod consequat pellentesque。.....READ MORE.... (3) 赞,(5) 无聊,(7) 微笑
+ 同一页面上还有24条帖子。
(B) 永久链接页面,包含单个微博及其详细的投票数/表情符号。
例如:
THE GREAT FUNNY POST 不是很有趣的内容,但是在本意上应该是一个有趣的帖子。Lorem ipsum dolor sit amet, consectetur adipiscing elit。Phasellus euismod consequat pellentesque。Quisque viverra adipiscing auctor。Mauris ut diam risus, in fermentum elit。Aliquam urna lectus, egestas sit amet cursus et, auctor ut elit。Nulla tempus suscipit nisi, nec condimentum dui fermentum non。In eget lacus mi, ut placerat nisi。 (You, Derp 和 1 人赞了这篇文章),(5) 无聊,(7) 微笑
第一种方法:
表#1:
显示一页帖子或单个帖子。首先查询第一张表以获取帖子,然后查询第二张表以获取与帖子相关的所有动作。每当进行投票等操作时,都会在
第二种方法:
表#1:
显示帖子页面时,只查询第一个表以获取帖子和动作数据,以显示具有详细操作的单个帖子,查询第二个表以获取与帖子相关的所有操作。每当进行投票等操作时,都会向“post_actions”表中插入一条记录,并更新表#1的“action_data”字段以存储更新的计数。
假设有100K篇帖子和10倍的操作,即创建了100万或更多个操作。第二种方法是否提供了好处?除了必须阅读、修改和更新JSON信息之外,还有什么缺点吗?
根据反馈添加更多信息:
1. Python脚本将读取、写入数据。 2. MySQL DB服务器将不同于Web服务器。 3. 由于帖子创建而导致的写入较少,即每天大约10000次。但是由于操作(如投票、喜欢、表情符号)可能更高,因此假定每秒最多有50次写入。 4. 我关心两种方法的读/写性能比较以及第二种方法的注意事项,以及它在未来可能出现的问题。
(A) 列表页面,包含许多微博以及它们的投票数/表情符号数,显示在单个页面上(例如25条)。
例如:
THE GREAT FUNNY POST 不是很有趣的内容,但是在本意上应该是一个有趣的帖子。Lorem ipsum dolor sit amet, consectetur adipiscing elit。Phasellus euismod consequat pellentesque。.....READ MORE.... (3) 赞,(5) 无聊,(7) 微笑
+ 同一页面上还有24条帖子。
(B) 永久链接页面,包含单个微博及其详细的投票数/表情符号。
例如:
THE GREAT FUNNY POST 不是很有趣的内容,但是在本意上应该是一个有趣的帖子。Lorem ipsum dolor sit amet, consectetur adipiscing elit。Phasellus euismod consequat pellentesque。Quisque viverra adipiscing auctor。Mauris ut diam risus, in fermentum elit。Aliquam urna lectus, egestas sit amet cursus et, auctor ut elit。Nulla tempus suscipit nisi, nec condimentum dui fermentum non。In eget lacus mi, ut placerat nisi。 (You, Derp 和 1 人赞了这篇文章),(5) 无聊,(7) 微笑
第一种方法:
表#1:
post_id | post_content | post_title | creation_time
用于存储投票、点赞和表情符号的表格#2:
action_id | post_id | action_type | action_creator | creation_time
显示一页帖子或单个帖子。首先查询第一张表以获取帖子,然后查询第二张表以获取与帖子相关的所有动作。每当进行投票等操作时,都会在
post_actions
表中插入一个记录。第二种方法:
表#1:
post_id | post_content | post_title | creation_time | action_data
在这里,action_data
可以是类似于{ "likes" : 3,"smiles":4 ...}
的东西。
表格#2:
action_id | post_id | action_type | action_creator | creation_time
显示帖子页面时,只查询第一个表以获取帖子和动作数据,以显示具有详细操作的单个帖子,查询第二个表以获取与帖子相关的所有操作。每当进行投票等操作时,都会向“post_actions”表中插入一条记录,并更新表#1的“action_data”字段以存储更新的计数。
假设有100K篇帖子和10倍的操作,即创建了100万或更多个操作。第二种方法是否提供了好处?除了必须阅读、修改和更新JSON信息之外,还有什么缺点吗?
根据反馈添加更多信息:
1. Python脚本将读取、写入数据。 2. MySQL DB服务器将不同于Web服务器。 3. 由于帖子创建而导致的写入较少,即每天大约10000次。但是由于操作(如投票、喜欢、表情符号)可能更高,因此假定每秒最多有50次写入。 4. 我关心两种方法的读/写性能比较以及第二种方法的注意事项,以及它在未来可能出现的问题。
ALTER TABLE Table1 ADD COLUMN total_likes INTEGER;
这样做也更容易自动维护信息,例如通过触发器。 - LSerni