使用PouchDB与SQL Server和CouchDB

6
我知道,PouchDB只能与CouchDB兼容的服务器配合使用。有没有办法在保持其原始架构的同时使用SQL Server作为后端?
我有一个想法,但我不确定它是否可行。任何能够实现这个想法的答案都将受到赞赏。
我认为可以通过使用CouchDB存储同步元数据(如修订版本和所有成功同步所需的信息)来完成。然后,最新的实际数据将按照其原始模式存储在SQL Server上。
要实现这一点,我需要使用我的堆栈(即C#)创建一个兼容CouchDB的服务器。这将充当CouchDB和PouchDB之间的代理,因此我实际上不需要实现所有方法。我将不得不截取某些方法,以使我能够在服务器上保持SQL Server和CouchDB同步(遵循业务规则),同时利用CouchDB在SQL Server数据上的同步功能。有了这个设置,我还可以在未来添加一堆中间件。
这个想法可行吗?我知道express-pouchdb存在,但它只是一个带有PouchDB后端的CouchDB兼容服务器。我想让CouchDB和SQL Server一起工作。如果可以,请问该如何实现?

听起来很困难...基本上你最终会将 Pouch 中的 JSON 文档存储在 SQL 数据库中。如果你在客户端使用像 SQLite 这样的 SQL 数据库,可能会更容易些。似乎甚至有一些开箱即用的解决方案可供选择(http://sqlite-sync.com/)。 - Phonolog
我曾经为类似的东西做过一个概念验证(仅在轮询中同步,仅针对特定数据集)。我的设置是使用PouchDB直接与Mirosoft SQL Server同步的Angular2客户端。我基本上在.Net中实现了这个http://docs.couchdb.org/en/2.0.0/replication/protocol.html协议,它工作得很好。我相信一般情况下这是可行的,但我还不确定它是否值得。我希望有时间在更一般的情况下使这个东西工作,并在发现新的东西时及时通知您。 - Max Kuchenkiller
嘿,我有同样的情况。你解决了吗? - Missak Boyajian
有人已经找到了这个问题的通用解决方案吗?我刚刚获得了资源,可以尝试以通用方式来尝试我的方法。 - Max Kuchenkiller
@MaxKuchenkiller,听起来很酷。你有没有做过什么东西? - Brian
1
@Brian 是的,我们确实做了,但是我们从未开发过易于使用的软件包。正如上面所述,我们最终采用了.NET实现同步协议。我们在生产环境中运行了一个非常简单的示例。如果您有兴趣并想查看,请在我的github([链接](https://github.com/kuchenkiller/CouchSQLSyncMSSQL))中找到演示项目并与我联系。 - Max Kuchenkiller
2个回答

5

1
有人做过这个吗?很有趣! 任何一个想法都好。 - Juan Carlos

0
您可以在CouchDB的_changes API上设置服务器端的监听器。该API允许服务器运行一个更改监听器进程,当CouchDB中的数据发生更改时触发。通过检查更改列表(docs)和更改类型,可以使用一些自定义逻辑将JSON文档(或其中的部分)映射到要在SQL中镜像的关系表中。
根据架构,将JSON映射到关系表可能会很困难。只映射有意义存储为关系数据的数据可以降低复杂性。例如,客户定义可以保持无模式在CouchDB中(从而保留无模式的优势),但销售行项目可以在SQL中进行镜像以便于报告目的。最有可能只有某些数据真正有意义存储在SQL Server中。CouchDB是您的数据源。
您问及维护SQL模式。实际上,您很可能不想或不必完全维护SQL模式。使用上述方法,如果客户地址发生更改,您可能并不在SQL中关心;客户模式在CouchDB中保持灵活。但是,您可能需要仅为客户ID(仅)创建SQL条目以强制执行引用完整性并处理删除客户的情况。
从时间点重新播放更改可用于从故障中恢复。

供参考:

http://guide.couchdb.org/draft/notifications.html


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接