将异构 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/