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

标签 mysql json perl

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

最佳答案

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

关于mysql - 在同一个 MySQL 表中存储异构 json 对象?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17747023/

相关文章:

python - 当 Mysql 数据库服务器中触发触发器时,我可以在树莓派上运行 python 脚本吗?

json - VueJS - 难以理解 .$set 和 .$add

javascript - 从 JSON 中删除新行

c# - JSON 回发到 c# webmethod 添加文字控制

python - Web 应用程序的集成测试

perl - 如何获取符号链接(symbolic link)文件的绝对路径?

php - PrestaShop 验证程序 : SQL security issues

mysql - 连接表并期望第二个表的结果为空

java - 无法连接到服务器上的远程数据库

linux - 使用模式拆分文件并使用包含此模式的字符串命名每个结果文件 (perl)