【问题标题】:storing heterogeneous json objects in same MySQL table?将异构 json 对象存储在同一个 MySQL 表中?
【发布时间】:2013-07-18 19:03:45
【问题描述】:

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

【问题讨论】:

  • 您应该考虑使用一些非关系型数据库(它们主要基于键值对概念进行操作)而不是使用 blob。
  • @DVK 我在这个 MySQL 数据库中还有一些其他的表,它们存储 JSON 对象以外的信息,所以我想以最好的推荐方式将这些 JSON 对象存储在同一个数据库中。跨度>
  • 您可能想要考虑为您序列化为 JSON 的至少部分数据实现某种 ORM;正如 Karoly 在他的回答中指出的那样,除非您希望能够查询序列化数据,否则这将很好地工作,在这种情况下,您将非常不走运。
  • 听起来你需要一些 NoSQL,看看 Redis,使用哈希可能是你需要的,否则存储一个 json blob 会使事情变慢,因为你不能查询里面的数据它。
  • 我发现 Postgresql 9.3 比我使用的 MySQL 版本具有更好的 JSON 功能:stackoverflow.com/q/17805483/719016

标签: mysql json perl


【解决方案1】:

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

【讨论】:

    【解决方案2】:
    猜你喜欢
    • 1970-01-01
    • 2016-06-28
    • 1970-01-01
    • 1970-01-01
    • 2019-09-03
    • 2012-09-20
    • 1970-01-01
    • 2011-06-30
    • 2019-12-26
    相关资源
    最近更新 更多