【问题标题】:Best way to Insert JSON data into MYSQL将 JSON 数据插入 MYSQL 的最佳方法
【发布时间】:2015-06-30 05:40:07
【问题描述】:

我在一个包含一对纬度和经度的文本文件中有一个 JSON 数据,现在我想将此数据存储到 MYSQL DB 中,请建议如何去做以及最好的方法是什么。

这是我的 JSON 数据

[{"latlon":{"lng":77.75124312,"lat":12.97123123},"type":"s"}, 
 {"latlon":{"lon":77.73004942455374,"lat":12.98227579706589},"type":"s"},
 {"latlon":{"lon":77.67374449291539,"lat":12.995490063545521},"type":"v"}, 
 {"latlon":{"lon":77.6097147993144,"lat":12.970900929013666},"type":"s"},
 {"latlon":{"lon":77.53933363476645,"lat":12.948316929346504},"type":"s"},
 {"latlon":{"lng":77.48213123,"lat":12.91213213},"type":"s"}
 .
 .
 .
 .
]
The String may go up to 50 points 

【问题讨论】:

  • 在表中创建一个clob列并存储它。
  • 您可以将其存储在 TEXT 列中。如果你需要根据这些数据进行搜索,sphinx 有一些非常好的功能可以解析和搜索 JSON 数据。
  • 我正在使用JAVA,请在此提出建议
  • 如果你使用 TEXT 或 blob,你会失去 mysql 的关系特性。更好地解析 JSON 并将数据插入到表字段中。
  • 请注意,mysql 5.7 将原生支持 JSON 作为一种新型列,具有新功能 JSN_* 和新的索引方式,将 nosql 在巨大读取负载上的性能优势与搜索和操作较小的关系优势相结合数据块。

标签: java mysql json


【解决方案1】:

一些 cmets 建议将其保留为 JSON 格式并将其存储在文本列中。

我建议,如果您可以控制架构,则应将其存储在两个 NUMERIC 字段中 - 一个用于纬度,一个用于经度。从根本上说,这就是您拥有的数据。您使用 JSON 作为容器格式收到它的事实与数据本身无关。

如果您将其存储为纬度和经度,则查询起来会更简单,如果您愿意,您仍然可以稍后重新创建 JSON...但是如果您最终想要获取它不 作为 JSON,您将处于更好的位置。这也意味着您不会将自己绑定到 JSON 以应对未来的变化。

我个人认为,将数据的内在性质与您碰巧接收数据的方式区分开来总是一个好主意。以该存储惯用的任何格式存储数据 - 因此,如果您要存储数字,请使用其中一种数字数据类型。如果您要存储日期和时间,请使用datetime 等。这样您就不会在每次想要访问数据时在您和数据本身之间增加一层。

这种方法还意味着您更有可能在早期发现不良数据 - 如果您直接存储 JSON 而不先对其进行解析,您可能稍后会发现纬度或经度不是t 一个有效的数字。哎呀,你的样本数据有时有lon,有时有lng,这表明你还是应该做一些数据清理。

【讨论】:

  • 好,那我要解析并一个一个存储
  • @Rakesh:是的,我愿意。实际上,我可能会创建一个类来存储纬度和经度对,并将两个方面分开:将 JSON 解析为对象,并将结果存储到数据库中。这样您就可以分别测试每个部分,而不是将两种完全独立的存储/传输格式捆绑在一起。
  • 好的,谢谢,但如果我以后不使用这对,那么我们可以将它作为 JSON 对象插入
  • @Rakesh:“如果我以后不使用这对”是什么意思?如果您不打算使用数据,为什么要存储它呢?如果您打算稍后再阅读它,为什么要强制所有潜在读者在每次阅读时解析 JSON,而不是以自然的数字形式使用它?
  • 抱歉,我之前的问题搞错了。非常感谢您的宝贵支持。会在任何需要重要建议的地方回复您。
【解决方案2】:

从 Mysql 5.7.10 及更高版本开始,JSON 支持是原生的,因此您可以拥有 JSON 数据类型

文档验证 - 只有有效的 JSON 文档才能存储在 JSON 列,因此您可以自动验证数据。

高效访问 - 更重要的是,当您将 JSON 文档存储在 JSON 列中时,它不会存储为纯文本值。相反,它被存储 采用优化的二进制格式,可以更快地访问对象 成员和数组元素。

性能 - 改进您的查询 通过为 JSON 列中的值创建索引来提高性能。 这可以通过虚拟列上的“功能索引”来实现。

方便 - JSON 列的附加内联语法使其 将文档查询集成到 SQL 中是非常自然的。为了 示例(features.feature 是一个 JSON 列):SELECT feature->"$.properties.STREET" AS property_street FROM features WHERE id = 121254;

【讨论】:

    【解决方案3】:

    这可能会对你有所帮助:-

    查看以下站点,它将您的 josn 数据文件转换为 sql 插入脚本:

    online JSON to SQL data conversion tool

    【讨论】:

    • 该链接的标题具有误导性。这不是脚本
    • @Mordechai 修改了链接副本更准确
    【解决方案4】:

    如果你在应用程序中使用 Java,你可以这样做。

    将 JSONObject 转换为 String 并保存为 TEXT/VARCHAR。在检索同一列时,将 String 转换为 JSONObject。

    例如

    写入数据库

    String stringToBeInserted = jsonObject.toString();
    //and insert this string into DB
    

    从数据库中读取

    String json = Read_column_value_logic_here
    JSONObject jsonObject = new JSONObject(json);
    

    参考:how to store JSON object in SQLite database

    【讨论】:

      【解决方案5】:

      基本上,如果这是对您的软件很重要的数据(如果会有涉及这些数据的查询),您应该考虑解析 JSON。

      如果不是:按原样存储!

      【讨论】:

        猜你喜欢
        • 2021-05-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多