快速导入到MongoDb

3
我有大约2百万个不同长度的字符串需要压缩并储存到MongoDb GridFS作为文件。这些字符串目前被储存在一个MS SQL表的TEXT字段中。我写了一个小应用程序,可以分别读取每一行然后将其压缩并存储为GridFS文件。我的程序有一个阅读器和50个线程池来存储结果。虽然能够正常工作,但速度很慢(平均每秒100条记录)。请问是否有更快的导入GridFS的方法?我在Windows上使用MongoDb 1.6、C#和.NET中的MongoCSharp驱动程序。

50个线程听起来很多。你确定它们不会导致缓慢(过多的锁定和线程切换开销)吗? - driis
1个回答

4
我认为在运行一个很简单的应用程序,将1000个字符串放入1000个GridFS文件中并对其进行分析时,我发现了MongoDb CSharp驱动程序中的问题。
结果显示,97%的时间都花费在检查集合中是否存在具有相同文件名的文件上。我在文件名字段上添加了一个索引,现在它的速度非常快!
对我来说问题是,如果驱动程序需要保持文件名唯一并进行检查,为什么它不添加唯一索引(如果缺少)?这背后的原因是什么?

这很奇怪。在GridFS中,文件名不必唯一,因为已经有了主键_id,对吧? - Thilo
我不确定GridFS规范,但使用MongoDbCSharp库对示例应用程序进行分析肯定会显示它检查文件是否存在,并在不存在时抛出异常。 - Khash

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接