比如redis哈。 你提交一个bgrewriteaof。会立马得到一个回复。即程序与redis的连接结束。redis自己在默默的执行操作。
mongodb有木有类似的命令参数?比如我remove掉一批object。尼玛等了30多分钟……= =。难道就木有 一个 db.collection.remove({param},{background:true})?= =
光阴似箭催人老,日月如移越少年。
参见这里: http://docs.mongodb.org/manual/reference/write-concern/
MongoDB 默认 w=1。你可以传个 w=0 告诉 MongoDB 你不想等它写操作完成。
w=1
w=0
这个叫做“异步返回”。有些语言(比如java)有mongodb的异步驱动,你可以gogole一下 mongodb async + 你用的语言。
目前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
参见这里: http://docs.mongodb.org/manual/reference/write-concern/
MongoDB 默认
w=1
。你可以传个w=0
告诉 MongoDB 你不想等它写操作完成。这个叫做“异步返回”。有些语言(比如java)有mongodb的异步驱动,你可以gogole一下 mongodb async + 你用的语言。
目前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