由于有批量操作的需求,看了一下這個(gè) Bulk API,看完之后有幾個(gè)問(wèn)題。當(dāng)前為了實(shí)現(xiàn) bulk insert,我自己定義了一個(gè) List, 每次有新數(shù)據(jù)要插入的時(shí)候,將數(shù)據(jù)轉(zhuǎn)換成合適的格式,放進(jìn)這個(gè) List 里,等需要的時(shí)候執(zhí)行 insert(List) 操作。這相當(dāng)于我自己維護(hù)了一個(gè)緩存隊(duì)列,而且這種隊(duì)列還需要考慮到線程安全。從 Bulk.insert() 的 API 來(lái)看,只是把數(shù)據(jù)直接 insert 到這個(gè) bulk 里。我想問(wèn)的是:Bulk 是不是自己在客戶端維護(hù)了一個(gè)緩存隊(duì)列?如果是的話,它的線程安全性有保障嗎?有了 Bulk 之后,是不是我不需要自己去維護(hù)我的緩存隊(duì)列,交給 Bulk 去做就可以了?Bulk 是用 db.collection.initializeOrderedBulkOp() 方法獲得的。測(cè)試了一下發(fā)現(xiàn),我似乎必須得長(zhǎng)期持有這個(gè)方法返回的引用,否則無(wú)法用其他方法再重新獲得緩存隊(duì)列中的數(shù)據(jù)。那么,如果長(zhǎng)期持有的話,是不是在 execute() 之前會(huì)保持著一個(gè)長(zhǎng)連接?那如果連接斷掉呢?
- 1 回答
- 0 關(guān)注
- 716 瀏覽
添加回答
舉報(bào)
0/150
提交
取消