2010-08-26 99 views
3

我有大約200萬個不同長度的字符串,我需要將它們壓縮並放入MongoDb GridFS中作爲文件。快速導入到MongoDb

這些字符串當前存儲在表的MS SQL TEXT字段中。我編寫了一個示例應用程序來讀取每一行,將其壓縮並存儲爲GridFS文件。

有一個讀取器和50個線程存儲結果的線程池。它可以工作,但速度很慢(平均每秒100條記錄)。

我想知道是否有任何方法可以更快地導入到GridFS中?

我在Windows上使用MongoDb 1.6與C#和.NET中的MongoCSharp驅動程序。

+0

50個線程聽起來很多。你確定它們沒有造成緩慢(過度鎖定和線程切換開銷)嗎? – driis 2010-08-26 10:02:30

回答

4

我想我在MongoDb CSharp驅動程序裏發現了這個問題,通過分析它來運行一個非常簡單的應用程序,該應用程序將1000個字符串放入1000個GridFS文件中。

事實證明,97%的時間花在檢查集合中是否存在具有相同文件名的文件。我在文件名字段中添加了一個索引,現在速度非常快!

對於我來說,問題是如果驅動程序需要保持文件名的唯一性並進行檢查,那麼爲什麼它沒有爲它添加唯一索引?這背後的原因是什麼?

+0

這很奇怪。文件名不必在GridFS中是唯一的,因爲已經有_id主鍵,對吧? – Thilo 2010-08-28 06:04:25

+0

我不確定GridFS規範,但使用MongoDbCSharp庫分析示例應用程序肯定會顯示它檢查文件Exists *和*是否拋出異常(如果不是)。 – Khash 2010-08-28 15:58:35

+0

khash,你可以發佈一些代碼來最好地理解,請。 – user325558 2011-03-07 13:59:58