4

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

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

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 查询所做的相反......

4

2 回答 2

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 带来一些压力(顺便说一句,这很少成为数据库的瓶颈)。

于 2013-07-19T13:56:15.497 回答
-2

我发现 Postgresql 9.3 比我使用的 MySQL 版本具有更好的 JSON 功能:

http://wiki.postgresql.org/wiki/What%27s_new_in_PostgreSQL_9.3#JSON%3a_Additional_functionality

http://www.postgresql.org/docs/9.3/static/functions-json.html

于 2014-10-03T23:42:18.970 回答