批次匯入疑問


  • 註冊用戶

    先前使用 PHP 進行 CSV 資料批次新增到 MongoDB 時,一時好奇如果將整批(170MB)一次性新增進去會有什麼情況,

    結果卻與我預期的不同,竟然可以整批匯入而沒有錯誤

    查了一下官方文件有提到

    https://docs.mongodb.com/manual/reference/command/isMaster/

    The maximum permitted size of a BSON wire protocol message. The default value is 48000000 bytes.

    那為何不會出錯呢? 不會出錯會不會有什麼風險?


  • 大中华区MongoDB顾问

    这里指的是

    本帖下載内容已隐藏,请登入以查看隐藏内容!
    的max size不超过48,000,000,也就是说一次通讯的message最大不超过这么大。

    因为不清楚你具体是怎么做的,我个人对PHP driver也不是十分了解,但是一般情况下驱动应该不会一次性把170MB的数据作为一个message发给服务器端,应该是拆分后再发送。因此没有报错。


  • Lv 1

    @zhangyaoxing

    原來有這個限制.. 收藏


  • Lv 1

    依以往對 MariaDB/MySQL 的認知,它們所謂 import buffer size 是指最大 "一筆" 資料不能超過這個 size。所以雖然整批資料有 170MB,但它是多筆,並非一筆,所以對 MongoDB 而言,並沒有超過,每筆都能正常存入。


  • Lv 1

    @Triton

    按文件資料結構應該是一次塞多份給 mongodb, 可能 driver 段真的有做分割

    本帖下載内容已隐藏,请登入以查看隐藏内容!

    OP_INSERT

    The OP_INSERT message is used to insert one or more documents into a collection. The format of the OP_INSERT message is

    struct {
        MsgHeader header;             // standard message header
        int32     flags;              // bit vector - see below
        cstring   fullCollectionName; // "dbname.collectionname"
        document* documents;          // one or more documents to insert into the collection
    }
    

    >td >documents

    FieldDescription
    headerMessage header, as described in Standard Message Header.
    flags

    Bit vector to specify flags for the operation. The bit values correspond to the following:

    • 0 corresponds to ContinueOnError. If set, the database will not stop processing a bulk insert if one fails (eg due to duplicate IDs). This makes bulk insert behave similarly to a series of single inserts, except lastError will be set if any insert fails, not just the last one. If multiple errors occur, only the most recent will be reported by getLastError. (new in 1.9.1)
    • 1-31 are reserved. Must be set to 0.
    fullCollectionName. for the concatenation. For example, for the database foo and the collection bar, the full collection name is foo.bar.
    One or more documents to insert into the collection. If there are more than one, they are written to the socket in sequence, one after another.

    There is no response to an OP_INSERT message.


  • 註冊用戶

    原來如此,感謝大家的回覆~


登录后回复
 

与 萌阔论坛 的连接断开,我们正在尝试重连,请耐心等待