很多团队在使用NoSQL的时候,都采用了比较保守的双定策略,将数据在NoSQL和MySQL中进行双写,这个双写可能是直接应用层写两次,可能是先写一个,再利用一些同步机制将数据同步到另一个。本文要讲的是一个利用CouchDB的Change Notifications机制来实现将CouchDB中的数据同步到关系型数据库中的例子。
CouchDB的问题
首先,作者不是由于我们上面说的原因而要做这件事。而是由于CouchDB无法满足他们的一些需求。我们知道CouchDB需要预先为所需要的查询操作定义View,然后所有的查询操作其实都是在此View上进行。所以如果你要进行的数据查询条件非常不一定,那么使用CouchDB可能就比较麻烦了。
作者考虑了两个方法:
1、为所有可能的查询顺序建立不同的View – 排列组合问题,你可以想像这会造成多么大的资源浪费
2、建立一个View,存储时将不同顺序的字段存多份 – 这个浪费和上面差不多
而实际上这种需求正是关系型数据库的强项,几乎所有的关系型数据库都支持对数据进行任意顺序的查询,不用预先确定需要进行查询的模式。只要为性能而建立好相应的索引即可。
解决方案
最后选择的方案是使用CouchDB的Change Notifications机制,这个机制允许对数据进行监听,当有写操作时,会执行相应的callback函数来完成你想做的操作。
具体实现流程如下:(主要使用了couchdbkit和django来实现)
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 -如果需要处理,那么就进行相应的处理
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
OpenWorld18大会:Ellison宣布数据库的搜寻和破坏任务
在旧金山举行的甲骨文OpenWorld 2018大会中,甲骨文首席技术官(CTO)兼创始人Larry Elli […]
-
ObjectRocket着力发展Azure MongoDB服务
MongoDB吸引了微软公司的注意力,微软公司计划针对运行于该公司2017年发布的Azure Cosmos D […]
-
创建NoSQL数据建模符号 企业架构师亲自上阵
新兴的NoSQL数据风格促使创新的应用程序快速发展,但NoSQL同时也带来了挑战。NoSQL系统能够快速投入生产,有时甚至根本不用创建任何的前期模式。
-
深入理解Amazon DynamoDB NoSQL云数据库服务
Amazon DynamoDB NoSQL云数据库即服务主要为跨移动设备、网页web端、游戏、数字营销和物联网领域的应用提供支持。