加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > Windows > 正文

Windows上的Java / MongoDB消息长度错误,但Linux上没有

发布时间:2020-12-14 02:45:25 所属栏目:Windows 来源:网络整理
导读:我们目前正在使用 java驱动程序将巨大的 JSON文件(~100 MB)导入MongoDB.目前我们将文件拆分为较小的块,因为我们第一次遇到导入整个文件的问题.当然,我们知道MongoDB的最大文档大小为16 MB的限制,但是我们现在导入的块远小于此. 奇怪的是,导入程序在Linux(ecl
我们目前正在使用 java驱动程序将巨大的 JSON文件(~100 MB)导入MongoDB.目前我们将文件拆分为较小的块,因为我们第一次遇到导入整个文件的问题.当然,我们知道MongoDB的最大文档大小为16 MB的限制,但是我们现在导入的块远小于此.

奇怪的是,导入程序在Linux(eclipse)上运行时工作正常,但同样的程序会抛出异常,说明Windows上的“不能说些什么”(eclipse).
从数据库中观察日志时,会显示错误消息

> "Thu Sep 13 11:38:48 [conn1] recv(): message len 1835627538 is too
> large1835627538"

重新运行同一数据集上的导入始终会导致有关消息长度的相同错误消息.我们调查了要导入的文档的大小(使用.toString().length()) – 导致错误的块只有几KB大.

mongo数据库运行的操作系统没有区别,但取决于执行导入代码的位置(使用相同的java-mongo-driver)

解决方法

“we are currently working on importing huge JSON files (~100 MB) into
MongoDB using the java driver”

我们是在谈论一个包含1000个JSON对象的JSON文件还是一个大小约为100MB的JSON对象?因为如果我没记错的话,每个对象的16MB限制不是每个包含1000个JSON对象的JSON文件.

也!

"Thu Sep 13 11:38:48 [conn1] recv(): message len 1835627538 is too
large1835627538"

the chunk that caused the error was only some kB large.

如果1835627538确实在kb,这是相当大的,导致约1750千兆比特!

要绕过包含1000个JSON对象的JSON文件,为什么不逐行遍历数据文件并以这种方式进行插入?使用我的方法无论数据文件有多大,迭代器只是指向特定行的指针.它不会将WHOLE FILE加载到内存中并插入.

注意:这假设您的数据文件每行包含1个JSON对象.

使用Apache Commons IO FileUtils(单击here),您可以使用它们的Line迭代器来遍历您的文件,例如(不完全正常工作的代码,需要导入正确的库):

LineIterator line_iter;
    try {
        line_iter = FileUtils.lineIterator(data_file);      
        while (line_iter.hasNext()) {
            line = line_iter.next();

            try {
                    if (line.charAt(0) == '{') 
                            this.mongodb.insert(line);
            } catch (IndexOutOfBoundsException e) {}
            }
        }
        line_iter.close(); // close the iterator  
    } catch (IOException e) {
        e.printStackTrace();
    }

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读