gpt4 book ai didi

java - 将大结果集转换为 json 的 mongodb java 驱动程序

转载 作者:可可西里 更新时间:2023-11-01 09:45:43 24 4
gpt4 key购买 nike

我正在对 mongodb 中约 1.2 亿条记录运行查询。查询通过 mongo shell 和使用 Java 驱动程序快速执行,但是当我尝试通过 Java 驱动程序将结果转换为 json 对象时,它非常慢(查询需要 < 100 毫秒,但转换为 json 需要 > 30 秒) .结果集有大约 5k 项。我正在使用 JSON.serialize(cursor) 进行转换。

虽然我预计转换为 json 字符串需要一点时间,但如果我从 shell 运行查询但执行

var cursor = //execute query
var arr = cursor.toArray();
arr

打印速度非常快。

mongo 服务器统计报告在序列化过程中出现越来越多的页面错误,但我已将 RAM 增加到比整个集合加上索引大得多。

关于这里可能发生的事情以及如何提高转换为 json 的速度的任何想法?

最佳答案

当您获得游标时查询没有执行,即使它执行了,您也只会得到一小部分结果。

通常我会建议不要使用 toArray() 将所有结果加载到内存中或序列化为内存中的字符串。 50K 文档只会占用大量客户端内存,而且分配内存的效率也不会很高。

如果您受困于 10gen Java 驱动程序,那么您将需要等待 JAVA-709解决流式写入功能。 Asynchronous Java Driver支持写入流的能力。

如果您可以使用外部程序,您可能需要查看 mongoexport .它可以将 JSON 写入文件或标准输出,并且应该接近最佳性能。

第一次运行查询出现页面错误是正常的。第二次,如果服务器有足够的内存将整个数据集保存在内存中,您应该会看到很少的页面错误。如果您在与服务器相同的机器上运行客户端,它可能会将数据推出内存,以便在客户端中为 JSON blob 分配所需的内存。

HTH-罗布

关于java - 将大结果集转换为 json 的 mongodb java 驱动程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16022840/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com