欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
MongoDB的WriteConcern 參數詳解

首先列一下WriteConcern的幾種拋出異常的級別參數:

  • WriteConcern.NONE:沒(méi)有異常拋出
  • WriteConcern.NORMAL:僅拋出網(wǎng)絡(luò )錯誤異常,沒(méi)有服務(wù)器錯誤異常
  • WriteConcern.SAFE:拋出網(wǎng)絡(luò )錯誤異常、服務(wù)器錯誤異常;并等待服務(wù)器完成寫(xiě)操作。
  • WriteConcern.MAJORITY: 拋出網(wǎng)絡(luò )錯誤異常、服務(wù)器錯誤異常;并等待一個(gè)主服務(wù)器完成寫(xiě)操作。
  • WriteConcern.FSYNC_SAFE: 拋出網(wǎng)絡(luò )錯誤異常、服務(wù)器錯誤異常;寫(xiě)操作等待服務(wù)器將數據刷新到磁盤(pán)。
  • WriteConcern.JOURNAL_SAFE:拋出網(wǎng)絡(luò )錯誤異常、服務(wù)器錯誤異常;寫(xiě)操作等待服務(wù)器提交到磁盤(pán)的日志文件。
  • WriteConcern.REPLICAS_SAFE:拋出網(wǎng)絡(luò )錯誤異常、服務(wù)器錯誤異常;等待至少2臺服務(wù)器完成寫(xiě)操作。

 

當我們執行如下操作時(shí)(將"name"為"lily"的"age"設置為20):

db.update({"name":"lily"},{"$set":{"age":20}})

默認情況下,該操作會(huì )使用WriteConcern.NORMAL(僅在網(wǎng)絡(luò )錯誤時(shí)拋出異常),等同于:

db.update({"name":"lily"},{"$set":{"age":20}},WriteConcern.NORMAL)

使用NORMAL模式參數,可以使得寫(xiě)操作效率非常高。但是如果此時(shí)服務(wù)器出錯,也不會(huì )返回錯誤給客戶(hù)端,而客戶(hù)端會(huì )誤認為操作成功。

因此在很多重要寫(xiě)操作中需要使用WriteConcern.SAFE模式,保證可以感知到這個(gè)錯誤,保證客戶(hù)端和服務(wù)器對一次操作的正確性認知保持一致。

(根據筆者測試,如果服務(wù)器發(fā)生掉電情況,客戶(hù)端依然得不到當時(shí)操作的錯誤返回,需要特別注意)

另外在很多時(shí)候,我們需要確切知道這次寫(xiě)操作是否成功(或者本次更新操作影響了多少個(gè)對象),這時(shí)候就需要:

WriteResult ret = db.update({"name":"lily"},{"$set":{"age":20}});if(ret.getN()>0) //操作影響的對象個(gè)數    return true;else    return false;

或者:

WriteResult ret = db.update({"name":"lily"},{"$set":{"age":20}});if(ret.getLastError() == null)    return true;else    return false;

此時(shí),getLastError()會(huì )查詢(xún)上次操作結果是否出現錯誤。

更進(jìn)一步

然后由于mongodb中使用連接池的原因,getLastError()需要再次從連接池中獲取連接,這樣效率會(huì )慢一些??梢赃@樣做:

db.requestStart();WriteResult ret = db.update({"name":"lily"},{"$set":{"age":20}});if(ret.getLastError() == null)    return true;else    return false;db.requestDone();

就可以保證update操作和getLastError()使用同一個(gè)連接,并且減少了一次存/取連接的過(guò)程。

 

還有一個(gè)方法

此時(shí)也可以使用WriteConcern.SAFE參數:

WriteResult ret = db.update({"name":"lily"},{"$set":{"age":20}}, WriteConcern.SAFE);if(ret.getLastError() == null)    return true;else    return false;// is equivalent to db.requestStart();WriteResult ret = db.update({"name":"lily"},{"$set":{"age":20}});if(ret.getLastError() == null)    return true;else    return false;db.requestDone();

這也是我推薦使用的方式,這樣即可以高效的得到返回結果,還能感知到服務(wù)器錯誤,一舉兩得。


本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
如何突破TCP-IP過(guò)濾防火墻進(jìn)入內網(wǎng)
Java之異常與錯誤的區別及java的異常體系
Oracle PL/SQL開(kāi)發(fā)基礎(第三十一彈:自定義異常)
全面了解Java異常捕獲方法
詳解Java中異常處理機制
計算機程序的思維邏輯
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久