【发布时间】: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