在同一个MySQL表中存储异构json对象?

时间:2013-07-19 13:14:08

标签: mysql json perl

将异构json字符串存储到同一MySQL表中的推荐方法是什么? 我在这个MySQL数据库中有一些其他表来存储除JSON对象之外的信息,所以我想以最佳推荐方式将这些JSON对象存储在同一个DB中。

我想将来自Perl脚本的json字符串存储到MySQL表中,该表不仅不具有相同的值,而且在不同的json对象中也将具有不同的层次结构。我正在考虑将它们存储为字符串或blob,以及每个条目的一些最小元数据。 E.g:

CREATE TABLE `entry` (
  `entry_id`               int(10) unsigned NOT NULL AUTO_INCREMENT,
  `file`                   varchar(1023)    DEFAULT NULL,
  `json`                   blob             DEFAULT NULL,
  `update_timestamp`       TIMESTAMP        DEFAULT CURRENT_TIMESTAMP,

  PRIMARY KEY (`entry_id`)
) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=latin1;

在使用Perl和MySQL直接进行此操作之前,是否有任何工具或库需要考虑?我想知道是否有任何东西与DBIx :: JSON对MySQL的SELECT查询所做的相反...

2 个答案:

答案 0 :(得分:5)

数据库中的Json对象完全没问题,直到您不想查询它的内容为止。

然而,存储类型值得讨论。我会用(ROW_FORMAT = COMPRESSED KEY_BLOCK_SIZE = 8)压缩InnoDB中的整个ROW,或者在仅压缩JSON的应用程序中进行压缩,并将其放入二进制格式。

使用第一个选项(应用程序处理TEXT,MySQL处理压缩)我希望json列按文本类型(TEXT,LONGTEXT,MEDIUMTEXT,TINYTEXT)。

使用第二个版本(应用程序处理压缩,MySQL只看到二进制)我当然会使用blob格式(TINYBLOB,BLOB,MEDIUMBLOB或LONGBLOB)。

两者都是有效的选择。这真的取决于你的个人优先事项。将压缩移动到应用程序是扩展更容易但引入复杂性的好处。让MySQL处理压缩是透明的,易于设置,但它给CPU带来了一些压力(这很少是数据库的瓶颈)。

答案 1 :(得分:-1)