我需要将我的Relational数据库(Oracle或Mysql)与CouchDb同步。有谁知道它是如何可能的。如果可能的话,我们可以通知CouchDb关于关系数据库发生的任何变化。
提前致谢。
答案 0 :(得分:6)
首先,您需要改变您对数据库建模的看法。与CouchDB同步不只是创建所有表的文档,而是将它们推送到Couch。
我正在将CouchDB用于制作中的网站,我将描述我的所作所为,也许它会对您有所帮助:
从一开始,我们一直使用MySQL作为主数据库。我绘制了实体,包括他们的关系。为了加速前端,我决定使用CouchDB作为content repository。好处是拥有完整准备好的文档,其中包含所有关系数据,因此可以用更少的开销获取数据。 因为文档可以包含相关实体 - 比如包含所有答案的问题文档 - 我首先确定了我想要推送给Couch的顶级实体。在我的示例中,只有问题会被推送到Couch,这些文档将包含答案,并且可能包含一些元数据,例如标签,用户信息等。在前端请求问题时,我只需要获取一个文档获得我当时需要的所有信息。
现在提出第二个问题:如何通知CouchDB更改。在我们的例子中,我们数据的所有更改都是使用CMS完成的。我的代码中有一个点,所有编辑动作调用。这就是我挂钩一个函数的地方,该函数将对象保存到CouchDB中。该函数确定此对象是否需要持久化(即:它是否为顶级实体),然后创建此对象的文档(考虑某种toArray函数),并递归地获取其所有关系。然后将完整的文档推送到CouchDB。
现在,在您的情况下,这里的变量可能完全不同,但基本思路是相同的:弄清楚您想要保存哪些文档,以及它们的外观。然后编写一个组合这些文档的函数,并确保在对关系数据库进行更改时调用它。
CouchDB非常简单。可能最简单的方法是直接更新现有文档。我想到了两种实现这一目标的方法:
views
值已增加”),那么编写_update
函数似乎是谨慎的。更新功能非常简单:它们接收HTTP查询和文档;他们修改文件;然后CouchDB存储新版本。您在Javascript中编写更新函数,它们在服务器上运行。这是将常见操作“压缩”为更简单(更少)的HTTP查询的好方法。