比如redis哈。 你提交一個bgrewriteaof。會立馬得到一個回複。即程序與redis的連接結束。redis自己在默默的執行操作。
mongodb有木有類似的命令參數?比如我remove掉一批object。尼瑪等了30多分鍾……= =。難道就木有 一個 db.collection.remove({param},{background:true})?= =
高洛峰2017-04-21 11:20:58
請參閱這裡:http://docs.mongodb.org/manual/reference/write-concern/
MongoDB 預設 w=1
。你可以传个 w=0
告訴 MongoDB 你不想等它寫作業完成。
PHPz2017-04-21 11:20:58
這個叫做「非同步返回」。有些語言(例如java)有mongodb的非同步驅動,你可以gogole一下 mongodb async + 你用的語言。
黄舟2017-04-21 11:20:58
目前redis在使用上更多是傾向於記憶體資料庫,只是redis可以配置持久化策略,可以將記憶體中的資料持久化到硬碟,在下次重啟時能夠自動恢復。 bgrewriteaof只是redis採用AOF持久化策略時,提供的一個允許管理員手動觸發AOF重寫的命令,從Redis2.4開始,AOF重寫由Redis自動觸發。這樣的Redis伺服器主執行緒在每次接受操作指令時會將資料寫入記憶體的同時寫AOF,然後由Redis自動fsync到硬碟,不會造成使用者操作的阻塞。 See: Redis Persistence
而mongodb的定位是一個Document based資料庫,且原生支援分散式架構。作為一個文件資料庫,持久化的保證是所有的資料必須寫到硬碟才算操作成功。分散式的架構為持久化操作帶來了更多的複雜性問題(保證多個伺服器之間的資料同步、分散式寫的策略等)。
綜上所述,不要期待Redis提供的某一個功能,mongodb也提供,因為二者的關注點不同,redis更多關注的高性能的I/O,mongodb更多關注的是大量數據的存儲,同時兼顧性能。
從你的描述來看,請求mongodb的操作阻塞比較嚴重。建議結合你的需求,在請求mongodb操作的同時附上WriteConcern,定義你所能容忍的寫入操作策略。 See: WriteConcern