Windows上的Java / MongoDB消息长度错误,但Linux上没有
我们目前正在使用
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) 解决方法
我们是在谈论一个包含1000个JSON对象的JSON文件还是一个大小约为100MB的JSON对象?因为如果我没记错的话,每个对象的16MB限制不是每个包含1000个JSON对象的JSON文件. 也! "Thu Sep 13 11:38:48 [conn1] recv(): message len 1835627538 is too large1835627538"
如果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(); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- Windows 7:将TCP套接字嗅到localhost
- windows-phone-7 – 如何通过浏览器网址启动Windows Phone应
- iis – 集成Windows身份验证仅在IE中不起作用
- 在Microsoft Dynamics CRM(OData)中的单个请求中创建多个实
- Windows 10 更新后VMware Workstation pro无法运行 (无需卸
- 【旧文章搬运】Windows句柄表分配算法分析(一)
- windows – 什么决定了进程外COM服务器注意到客户端已经死亡
- Windows Phone 7 – iCal Generator – C#
- Windows – Linux相当于DOS的“启动”命令?
- 使用Windows XP,Qt Creator 4.5.2(Windows 32位)进行QT MyS
- windows-8 – 在MetroStyle应用程序中使用COM对象
- windows – I / O完成端口* LAST *称为回调,或:
- 开放源代码 – 打开Windows Workflow的替代方案
- Windows-8 – 使用Visual Studio 2010在Windows
- arm – 如何解码Windows CE调用堆栈?
- 如何使Windows文件锁定更像UNIX文件锁定?
- microsoft-metro – Windows 8商店应用程序是否具
- windows – 你不觉得编写安装程序可能/应该更简单
- ntfs – 如何删除名称末尾带有空格的文件和隐藏属
- WP7:无法在对WCF服务的异步调用中捕获FaultExce