利用Redis实现MongoDB的getlasterror功能

日期: 2011-05-26 作者:nosqlfan 来源:TechTarget中国 英文

  MongoDB有一个命令叫getlasterror,从名字上看它的作用好像是获取最近的一个error。但其实这是MongoDB的一种客户端阻塞的方式。官方的解释如下是MongoDB 在写操作时,默认不会等数据写完后才返回,你可以通过使用getLastError命令来保证你的写是成功的。

  说白了,MongoDB的写是异步的,返回给客户端成功但其写并不一定成功,而且在多个数据结点进行replication的时候,更无法保证数据同步到其它结点上。getLastError就是为此而生的,你指定一个条件,然后这个函数会一直阻塞到服务端告知这个条件满足了才会返回值。(当然,为了防止死等,这个函数还有一个超时参数),例子:

  db.runCommand( { getlasterror : 1 , w : 2 } )

  上面命令表示等写操作被写到两个结点再返回成功。

  这一功能使得数据安全性的保证更加灵活。

  而最近有朋友在Redis上也实现了这一功能,实现的方式不是修改Redis源码,而是使用现有的功能拼得出,具体过程如下:

  1. Client SUBSCRIBEs to KEY on *slave*

  2. Client writes KEY (e.g. set foo bar) to master

  3. Client publishes KEY to master

  由于Redis的单线程写操作,下面两个操作会被顺序执行

  4. Master will replicate KEY to slave

  5 Master will propogate *PUBLISH KEY* to slave

  最后,在Master同步完数据后,客户端会收到SUBSCRIBE的消息:

  6. Gets KEY event on SUBSCRIBE!

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

作者

nosqlfan
nosqlfan

相关推荐