mysql – 使用JSON而不是规范化数据,这种方法是否正确?

前端之家收集整理的这篇文章主要介绍了mysql – 使用JSON而不是规范化数据,这种方法是否正确?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

MySQL innoDB表中都有微博帖子和与它们相关的投票/表情符号.
需要两种类型的页面

(A)包含许多微博的列表页面以及他们的投票计数/表情符号在单页上计数(比如说25).

例如.

THE GREAT FUNNY POST

Not so funny content in a meant to be funny post. Lorem ipsum dolor sit amet,consectetur adipiscing elit. Phasellus euismod consequat pellentesque. …..READ MORE….

(3) likes,(5) bored,(7) smiled

.同一页上有24条以上的帖子.

(B)包含单个微博的固定链接页面,其中包含详细的投票计数/表情符号.

THE GREAT FUNNY POST

Not so funny content in a meant to be 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 and 1 more like this),(5) bored,(7) smiled

第一种方法

表格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可以是{“like”:3,“smiles”:4 …}

表2:

action_id | post_id | action_type | action_creator | creation_time

显示帖子页面,只需查询第一个表格即可获得帖子和帖子.行动数据,
显示具有详细操作的单个帖子,将查询第二个表以获取与帖子相关的所有操作.无论何时完成投票等,都会在post_actions表和action_data中进行插入
更新表#1的字段以存储更新的计数.

假设有100K帖子和10x动作I.e.创建了100万或更多操作.
方法#2是否有益处?除了必须阅读,修改和更新JSON信息之外,它有什么缺点吗?
无论如何,有哪种方法可以遵循并进一步改进?

根据反馈添加更多信息:

> Python脚本将读取,写入数据.
> MysqL数据库服务器与Web服务器不同.
>由于帖子创建而写的内容很低I.e.每天10000.但是那些由于操作原因可能更高,假设由于投票,表情等行为而每秒最多写入50次.
>我关心的是第二种方法的读取/写入性能比较和第二种方法的问题,以及将来可能会遇到的问题.

最佳答案
我建议将所有喜欢/投票数据(聚合和原子)存储在表1中并完全丢弃表2或使用2个表而不使用聚合数据,同时依赖于JOIN语法,聪明的查询和良好的索引.

为什么?因为否则你会在评论/投票/喜欢的时候一直查询和写入两个表格.假设每个帖子只有10个动作用于显示交互,我真的将它全部存储到1个表中,可能为每种动作制作一个额外的列.您可以在数组上使用JSON或简单地序列化(),这应该更快一些.

您最终选择的解决方案将高度依赖于您获得的操作数量以及您希望如何使用它们.使用解决方案1可以轻松获得1个帖子的所有操作并且速度非常快但在内部搜索会很麻烦.另一方面,解决方案2占用更多空间,仔细查询和编写索引.

猜你在找的MySQL相关文章