可以将JSON数组数据存储在MySQL数据库中吗?

时间:2012-08-13 03:11:46

标签: php mysql database database-design

我有一个独特的情况。我网站的用户可以提交供其他用户查看的文章,但是他们可以限制谁可以按年龄和国家/地区查看文章。我的问题是,不是有250条记录(每个国家链接到文章1条),我认为适合在JSON格式的文本字段中存储所有250个国家(或他们希望对其他用户可见的任何国家)数据库。这样我每篇文章只需要一条记录。我不确定性能是否会受到严重影响?该网站将处理1-2百万用户,提交审查的文章数量也将相当大。唯一要处理的“处理”是每个用户的国家/地区都存储在数据库中,并根据国家/地区阵列检查是否有文章查看是否允许该用户查看该文章。

你们觉得怎么样?我是否过度思考每篇文章的250条记录是多少?

7 个答案:

答案 0 :(得分:4)

我认为将数据存储在查找表中是完全可以接受的。如果事情发生变化,它将在未来给你更大的自由,只要你很好地索引表格,性能就不会太多了。

Mysql可以轻松处理数十亿条记录的数据。是的,您需要确保照顾数据完整性 - 但是在查找表中添加列而不是更改存储在每个记录中的对象突然变得更加容易。

确保您正确保存数据 - 因为您不会重复不必重复的信息。将国家/地区保留在一个表中,并在查找表中引用一个引用它的简单ID。

答案 1 :(得分:3)

简而言之,我会说如果您不打算根据该列查询数据,那么将Json Data存储在Relational数据库的列中就可以了。

如果您需要根据该列查找数据,那么在排除数据之前必须解析json会有很大的性能损失,因此这将是一个否定的。

我们在我的工作中以较小的规模遇到了这个问题,并且在数据库中存储属性的json已经很好地不会增加非搜索属性的数据库的复杂性。

答案 2 :(得分:1)

我会使用另一个表代替该数据,并创建一个匹配它的唯一列。

答案 3 :(得分:1)

您有一个“国家/地区”表和一个“文章”表。我会制作第三个“国家文章”,其中只包含应该匹配的索引。毕竟Mysql是关系型的。 如果你担心性能,那就是基准。

答案 4 :(得分:0)

一种选择可能是使用位域代表您的国家/地区,使用MySQL bitbinary类型。这将允许您将每个contry的信息存储在一个位中,这样每个记录最多只需要32个额外字节(8位/字节* 32个字节= 256位)。

我不确定,但甚至可以使用按位运算进行查询,这可能非常快。

答案 5 :(得分:0)

您可以为国家/地区设置单独的表格,并将其ID与文章表格一起存储。

您可以在国家/地区表格中存储所有国家/地区,亚洲,欧洲,北美洲,南美洲等的选项。

答案 6 :(得分:0)

JSON将阻止DBMS检查您希望存储的国家/地区的有效性。它基本上是一个不透明的文本,因此DBMS不能强制引用完整性(外键)。

即使您不需要查询国家/地区(这是一个非常大的问题),您至少需要在检查特定国家/地区之前解析JSON。

JSON可以很好地匹配分层数据,但这只是一个简单的集合(一个国家或者是该集合的元素),可以通过单独的联结表ARTICLE_COUNTRY很好地表示,然后可以维护它并高效搜索:

enter image description here

此联结表仅链接到可以访问该文章的国家/地区。如果大多数国家/地区都可以访问大多数文章,您甚至可以反转联结表的含义,只存储“禁止”的国家/地区,从而降低总行数。