批量插入MongoDB中的GridFS

时间:2014-10-17 16:03:35

标签: python mongodb pymongo bulkinsert gridfs

有可能吗?如果是这样呢?

目前我正在逐个将字符串> 16MB插入到GridFS中,但是当处理不是1个字符串时它非常慢,但有数千个字符串。我试图检查文档,但没有找到关于批量插入到GridFS存储的单行,而不仅仅是简单的集合。

我正在使用PyMongo与MongoDB进行通信。

3 个答案:

答案 0 :(得分:1)

如果你把它们作为文件,就像

一样
for $LETTER in {a..z}
do
  ( find /path/to/basedir -iname "$LETTER*" -exec mongofiles -d yourGrid '{}' \; &)
done

应该给你26个线程将数据推送到MonoDB。

完成后,根据您的需要重命名yourGrid.fs集合。

要确保没有任何内容被破坏,您应该在屏幕实用程序中运行此命令或从终端中分离它。

答案 1 :(得分:1)

我阅读并研究了所有答案,但不幸的是,他们并没有满足我的要求。我需要用于在GridFS中指定jsons的_id的数据实际上存储在JSON本身内部。这听起来像是最糟糕的想法,包括冗余等,但不幸的是它的要求。 我所做的是我为GridFS编写了用于多处理插入的插入线程,并插入了几个线程的所有数据(2个GridFS线程足以获得适当的性能)。

答案 2 :(得分:0)

对于数据库的批量插入,16MB文档大小限制也是限制(请参阅驱动程序规范中的request size limits)。文档的批量插入方法通常只是将事务批处理为块(基本上是巨大的文档数组)并将它们发送到数据库。您可以通过在shell中创建大量文档和doing an insert来手动尝试,但上限仍然存在。

使用GridFS时,用于拆分正在存储的文件的块大小为255 / 256k(默认情况下为255k,因为this 2.4.10 change和相关的驱动程序更改)所以理论上你可以适应~64块向服务器发送一条消息但确定如何从故障中恢复可能会非常棘手。您还可以配置块大小,这可能是更好的选择,请参阅chunkSize上的pymongo reference,但同样需要保持在16MB的限制之下。