【问题标题】:Parsing giant json file into postgreSql [closed]将巨型 json 文件解析为 postgreSql [关闭]
【发布时间】:2018-12-01 12:36:59
【问题描述】:

我在一个大小约为 400 GB 的单个 json 文件中有一个 db 转储(不是我的选择,必须使用我得到的东西),目标是解析它并插入 postgre。它包含大约 110 万个大型嵌套对象。

现在我使用 mongoDB 作为解析器,然后从那里批量查询并使用 php (yii2) 插入 postgre,但在当前状态下,即使我可以解决问题,也需要 2 天以上的时间来处理查询时间随着偏移量的增加而急剧增加(从 0 的 1 秒,到 100k 的 70 秒,甚至更多)。

正如我所说,我的主要目标是以最有效的方式将其全部解析为 postgres,因此我愿意接受任何语言的任何解决方案,如果值得的话,因为我必须每周进行一次

更新。

我发现json中的所有对象实际上都是用新行分隔的,所以我只是逐行解析它们,并在解析时分批插入到postgres中。该方法将解析时间缩短至 1 小时。

【问题讨论】:

  • 也许将整个 JSON 文件导入到 postgre 临时表中,然后使用精简的 postgre JSON 内置函数来操作数据并将其放入必要的表中。事实上,您正在跳入和跳出各种应用程序会给流程增加自己的开销。
  • @jeff 你的意思是像在单个 jsonb 值中插入 400gb?这甚至可能吗?我想我会内存不足
  • inserting into postgres: 改成什么结构?在 postgres 中不可能有 >1 GB 的字段,即使低于这个大小,从几百 MB 开始的字段也会遇到很多问题。
  • 仅供参考:MongoDB 服务器不包含 JSON 解析器。 MongoDB 在磁盘上(以及通过有线协议)的本机格式是BSON,这是一种具有更丰富数据类型的类似 JSON 的二进制序列化。语言驱动程序负责从特定于语言的表示(即 PHP 对象)或 JSON 等格式转换。如果您正在寻找一种更有效的方式将 JSON 加载到 Postgres 中,那么您绝对应该直接导入而不是通过另一个数据库。或者,如果导入时间已经可以接受,您也可以在 MongoDB 中处理您的数据。

标签: php json postgresql parsing


【解决方案1】:

您是否已经尝试过使用JSONParser,这对我来说是最好的解决方案。

【讨论】:

  • 我尝试在 php 上使用我自己的流解析器,但即使使用 fork 也需要更多时间来处理。
  • 当然会...文件是 400gb...您应该花 3 天或更长时间...抱歉给您带来麻烦@SysError
猜你喜欢
  • 2017-11-06
  • 2020-02-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-30
  • 1970-01-01
  • 1970-01-01
  • 2020-12-28
相关资源
最近更新 更多