将PouchDB与SQL Server和CouchDB一起使用



我知道PouchDB只适用于CouchDB兼容服务器。有没有办法使用 SQL Server 作为后端,同时保持其原始架构?

我有一个想法如何实现这一目标,但我不完全确定这是否可行。任何能使这一结果取得成果的答案将不胜感激。

我认为可以完成的方法是使用 CouchDB 存储同步元数据,例如修订和成功同步所需的所有内容。然后,实际的最新数据将按照其原始架构存储在 SQL Server 上。

为了能够完成此操作,我需要使用我的堆栈(C#)创建一个与CouchDB兼容的服务器。这将充当CouchDB和PouchDB之间的代理,因此我实际上不需要实现所有方法。我将不得不截获某些方法,这些方法将允许我在服务器上保持SQL Server和CouchDB同步(遵循业务规则),同时利用CouchDB对SQL Server数据的同步功能。有了这个,我还可以添加一堆我希望将来的中间件。

这个东西可行吗?我知道express-pouchdb存在,但它只是一个与PouchDB后端兼容的CouchDB服务器。我想要的是让CouchDB和SQL Server一起工作。如果是这样,我应该怎么做?

听起来可能是一个疯狂的想法,但您可以在服务器上使用 PouchDB 并插入使用 SQL Server 的备用存储适配器。这样你就不需要重新实现复制逻辑(这真的很难),你可以专注于存储部分。

一些提示:

  • https://pouchdb.com/adapters.html
  • https://github.com/Level/leveldown
  • https://github.com/calvinmetcalf/sqldown

您可以在 Couchdb 的 _changes API 上设置服务器端侦听器。 此 API 允许服务器运行更改侦听器进程,该进程在 CouchDB 中的数据更改时触发。 通过检查更改列表(文档)和更改类型,可以使用一些自定义逻辑将要镜像的 JSON 文档(或其部分)映射到 SQL 中。

将 JSON 映射到关系表可能很困难,具体取决于架构。 可以通过仅映射有意义的数据存储为关系数据来降低复杂性。 称之为混合方法。 例如,客户定义可以在 CouchDB 中保持无模式(从而保留无模式的优势),但销售行项目可以在 SQL 中镜像,以便于报告目的。很可能只有某些数据真正适合存储在SQL Server中。 Couchdb 是你的真相来源。

您询问了有关维护 SQL 架构的问题。实际上,您很可能不想或必须完全维护 SQL 架构。使用上述方法,您可能不在 SQL 中关心客户的地址是否更改;客户模式在 CouchDB 中保持灵活。但是,您可能希望(仅)为客户 ID 创建一个 SQL 条目,以强制实施引用完整性,并在删除客户时处理这种情况。

可以从某个时间点重播_changes以从故障中恢复。

供参考:

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

最新更新