我们如何导入行数超过500K的表?如果通过块导入将是解决方案,是否有关于将csv数据块导入mongodb的教程?
我尝试使用以下命令导入包含2,710,000行的csv文件:
mongoimport -d test -c transact --type csv --file transact.csv --headerline
它出错了:
2015-11-02T12:44:35.420-0500 connected to: localhost
2015-11-02T12:44:38.419-0500 [........................] test.transact
11.7 MB/397.5 MB (2.9%)
2015-11-02T12:44:41.414-0500 [#.......................] test.transact
22.1 MB/397.5 MB (5.6%)
2015-11-02T12:44:44.413-0500 [##......................] test.transact
33.8 MB/397.5 MB (8.5%)
2015-11-02T12:44:47.414-0500 [##......................] test.transact
44.0 MB/397.5 MB (11.1%)
2015-11-02T12:44:50.420-0500 [###.....................] test.transact
55.3 MB/397.5 MB (13.9%)
2015-11-02T12:44:53.413-0500 [###.....................] test.transact
66.1 MB/397.5 MB (16.6%)
2015-11-02T12:44:55.962-0500 [####....................] test.transact
73.5 MB/397.5 MB (18.5%)
2015-11-02T12:45:07.501-0500 Failed: read error on entry #500899: line 500900
, column 140: extraneous " in field
2015-11-02T12:45:07.502-0500 imported 500000 documents
为什么只有500K可以加载到mongodb? 我在网上看了一下:
每个要迁移的块的最大文档数
如果块中的文档数超过 250000 文档或者是最大块大小可以容纳的平均大小文档数的1.3倍,MongoDB无法移动块。
源: https://docs.mongodb.org/manual/reference/limits/
我也遇到了一个开发人员的博客,他也遇到了类似的问题:
真的?真的吗? MongoDB在大约 500,000 文件后死亡,无声地破坏我的数据,没有发出任何警告然后拒绝让我读它?我从来没有在我用过的任何其他软件中看到过这种破坏的行为。我回到了通道,沸腾了(我无法想象那里的人非常乐意为愤怒的人提供免费支持,但他们仍然很有帮助),并详细说明了我的困境。显然,如果我想在数据库中拥有超过500k的文档,解决方案是重新格式化我的服务器并安装64位操作系统。
源: http://www.stavros.io/posts/my-experience-with-using-mongodb-for-great-science/
我们如何导入行数超过500K的表?如果通过块导入将是解决方案,是否有关于将csv数据块导入mongodb的教程?
答案 0 :(得分:0)
我从未尝试使用CSV导入,但我可以向您保证,MongoDB可以处理许多更多文档。我管理的集群的集合超过了2亿个文档。
你在这里混合概念。 chunk是用于管理sharded cluster的逻辑单元,可以具有任意大小。但是,当超过某些阈值时,它被视为Jumbo-Chunk,并且无法从一个分片迁移到另一个分片以平衡存储在每个群集节点上的数据。块阈值与MongoDB实例可以容纳的最大数据完全无关。
并且,请原谅我的法语,你引用的那个人对他正在谈论的事情知之甚少,记录他自己无法完成最简单的任务,他似乎也没能read the docs。我们实际拥有什么?一个人咆哮着他不知道的事情,而且懒得正确地准备他那些破碎的 M Sc。坦率地说,我问自己他是如何获得他的BSc,第一名。那家伙运行开发版的分支不鼓励生产并抱怨数据损坏(无论如何,他应该有备份,因为他是一个{ {3}})......就我可以抛出帝国大厦而言,我相信这些信息。 ;)
回到你的问题: 您可能陷入了同样的陷阱:使用32位版本的MongoDB,除了非常小的测试或概念验证之外,根本不建议。恰恰相反:
运行32位版本的MongoDB时,服务器的总存储大小(包括数据和索引)为2千兆字节。 因此,请不要在32位计算机上部署MongoDB。
因此,首先要确保您不运行32位版本的MongoDB。必要时进行更改。
当您运行64位版本的MongoDB时,请继续。
您可以做的第二件事是绝对肯定地确保500900行没有损坏。只需用
打印出来即可sed -n "500900p" your.csv
然后双倍和三倍检查输出。如果您仍有问题,请在"Systems Administrator and IT-Manager"
上添加上述sed
命令输出的新问题