在MySQL中存储JSON时,多少就是多少



我一直想知道我为我的统一组织网站所做的当前数据库设计。一般来说,这个网站是用来显示信息和事件的。每个部门的活动各不相同。它做一些正常的事情,如显示事件、为管理员创建事件、为用户注册事件等。问题是每个部门可能有不同的表格来注册新参与者,比如部门A有5个表格输入,但部门B有8个表格输入。然而,每个事件可能都有不同的形式,有多种类型,如文本、单选或复选框。

为了解决我之前提到的问题,我设计了一个数据库,该数据库包含eventsdepartementsevent_formsform_typesevent_form_options(当管理员决定选择该类型的表单时,用于复选框或单选框)、event_form_responses和其他一些与此问题无关的表。我的想法是,管理员可以创建他们想要的任何数量的表单输入,每个表单输入等于event_forms表中的一行,该表引用了具有event_id的特定event。但是;"问题";使用这种方法可能发生的问题在CCD_ 10表中。在该表中,用户将对某个事件的每个表单输入都有响应。比方说,event A有10个表单输入,然后有60个人决定注册该事件,这意味着event_form_response仅对该事件就有600行响应!。然后它需要显示在管理面板中。

我的问题:

这会影响查询和网站性能吗?我想会的。如果我更改event_formevent_form_responses以将其存储为JSON,该怎么办?在这一点上更有利吗?。使得每一个CCD_ 15都可以容易地以不同的形式输入不同的签名。对于event_form_responses,将具有1 * U而不是Q * U,其中U是在所述事件中注册的用户总数,而Q是表单输入量。提前感谢

我不会担心每个事件有600行。假设您已经很好地设计了索引来支持查询,MySQL可以处理每个表数亿行。当您有超过10亿(1e9)行时,表通常开始难以扩展。

我已经在Stack Overflow上回答了很多关于MySQL和JSON的问题。我的结论是,虽然JSON使存储具有可变或复杂结构的数据变得容易,但它是有代价的。

针对JSON数据的查询比针对普通行和列的传统SQL查询更复杂。学习搜索或排序存储在JSON中的数据会更加困难。并非不可能,但这是一种完全不同类型的查询。如果你还没有这方面的经验,你将经历一个陡峭的学习曲线。

你说你关心性能,我发现搜索或排序JSON的查询比使用普通表的查询更难优化。

此外,这在很大程度上取决于您如何构建JSON。JSON是非常自由的,您可以创建数组和键/值对象,还可以嵌套进一步的结构。但在某些情况下,我看到人们创建了无法使用MySQL的JSON函数查询的JSON结构。您需要对可用的JSON函数类型进行大量的研究,并进行大量的实践实验来了解它们的优势和劣势。

此外,我发现以JSON格式存储数据通常需要的空间是以普通行和列存储等效数据的2-3倍。原因是数字被存储为字符串,对象键出现在每一行而不仅仅是表头,引号、逗号和括号需要额外的字符。

你可能喜欢我的演示如何在MySQL中使用JSON错误。

在阅读了@Bill Karwin的幻灯片演示、自己的实验和一点兼职工作的经验后,我得出结论,我将在这两个表中使用json,原因如下:

  • 对于even_forms表,我意识到用户需要更新数据。因此,制作规范化版本将是困难/复杂的,因为我们不知道列用户可能会在哪里更改,或者可能同时,用户希望以随机顺序同时添加或删除列。因此json更易于管理
  • 对于event_form_responses,我的学长说,我们需要限制从数据库中获取数据,以保持网站的性能。通常是50左右。如果我要将其标准化,获取10个用户表单响应等于获取100个数据(如果事件表单有10个问题)。所以一次显示5个事件表单响应对用户体验并不是很好,是吗?。但是,尽管这个网站的用户不会一次达到10公里左右(我认为最多300-1000),我还是认为这是一个最佳实践

最新更新