将CouchDB的数据备份到关系数据库

很多团队在使用NoSQL的时候,都采用了比较保守的双定策略,将数据在NoSQL和MySQL中进行双写,这个双写可能是直接应用层写两次,可能是先写一个,再利用一些同步机制将数据同步到另一个。本文要讲的是一个利用CouchDBChange Notifications机制来实现将CouchDB中的数据同步到关系型数据库中的例子。

CouchDB的问题

首先,作者不是由于我们上面说的原因而要做这件事。而是由于CouchDB无法满足他们的一些需求。我们知道CouchDB需要预先为所需要的查询操作定义View,然后所有的查询操作其实都是在此View上进行。所以如果你要进行的数据查询条件非常不一定,那么使用CouchDB可能就比较麻烦了。

作者考虑了两个方法:

  • 1.为所有可能的查询顺序建立不同的View – 排列组合问题,你可以想像这会造成多么大的资源浪费
  • 2.建立一个View,存储时将不同顺序的字段存多份 – 这个浪费和上面差不多

而实际上这种需求正是关系型数据库的强项,几乎所有的关系型数据库都支持对数据进行任意顺序的查询,不用预先确定需要进行查询的模式。只要为性能而建立好相应的索引即可。

解决方案

最后选择的方案是使用CouchDB的Change Notifications机制,这个机制允许对数据进行监听,当有写操作时,会执行相应的callback函数来完成你想做的操作。

具体实现流程如下:(主要使用了couchdbkitdjango来实现)

  • 1 Connect to _changes feed – 连接到_changes接口以获取数据修改操作
  • 2 For every line in the feed – 对每一条数据执行如下两步操作
  • –2.1  Determine if you want to act on it – 通过过滤规则判断数据是否要处理
  • –2.2  (If yes) do something about it -如果需要处理,那么就进行相应的处理

原文链接:http://goo.gl/TCYpE

anyShare赠人玫瑰,手有余香,分享知识,德艺双馨!
          

无觅相关文章插件,快速提升流量