CloudantSync 与 JSONStore

CloudantSync vs. JSONStore

有人可以解释一下 MobileFirst 平台上 JSONStore 和 CloudantSync (CDTStore)(以及作为奖励的 PouchDB)之间的主要区别吗?

我很难决定使用哪一个更好。

我看到文档 here 指出,如果您需要 FIPS 140-2 合规性、需要同步或正在构建混合应用程序,JSONStore 会更好。但是,看起来您也可以使用 CDTStore 完成所有这三个操作。另外,我在一些教程中看到了 PouchDB。我试图了解看起来像是做同一件事的不同方法之间的主要区别。任何见解将不胜感激。

我看到 CDTStore (iOS) 和 CloudantSync (Android) 仅指本地实现,而不是 Hybrid (Cordova),因此这是一个有效的关键区别。

一些注意事项:

  • CDTDatastore is used for native app development on iOS (it is an Objective-C library). There's also an Android version 可用。
  • JSONStore 可用于 iOS, Android, JavaScript, and Cordova 环境。
  • PouchDB 是一个 JavaScript 库,可以 运行 在多种环境中:Node.js、网络、混合移动、桌面(例如 Electron),甚至在某些环境中可以 运行 JavaScript.
  • 的物联网设备

三者的功能大致相同。最大的区别在于 API、加密数据的能力以及库将在哪些环境中 运行。

这个问题的答案有点模糊,因为功能确实有很多重叠,所以提前道歉。我在 Cloudant 团队工作,所以我可能无意中有偏见。我将尝试详细说明下面的相同点和不同点(就目前而言),这有望让您(和其他人)更好地了解哪些库符合您的应用程序的需求。

为了搭建舞台,相似之处大致如下:

  • 两者都存储 JSON 数据并公开 NoSQL 而不是关系接口。
  • 两者都使用 SQLite 作为底层持久数据存储。
  • 但是,两者都没有向客户端公开 SQLite——这是一个实现细节。特别是 Sync 在 SQLite 中有一个有点复杂的数据模型来支持同步元数据。
  • 两者都旨在将来自远程服务的数据安全地存储在来自远程服务的设备上。
  • 两者都提供在设备上查询 JSON 数据。两者都在底层使用 SQLite 的索引引擎。
    • Sync 提供了一个基于 Cloudant Query 的更灵活、更强大的系统。 Sync 通过 SQLite 的 FTS 引擎提供全文搜索。
    • Sync 还允许在任何时候创建和删除索引,而我相信 JSONStore 需要在创建集合时定义索引。

同步

Cloudant Sync 和 JSONStore 的设计理念都是将远程服务的数据本地存储在设备上以供离线使用,或者只是为了让用户更快地处理数据。

我们最初设计 Cloudant Sync(CDTDatastore on iOS,sync-android on Android)是为了与远程 Cloudant 或 CouchDB 服务器同步数据。当与 Cloudant/CouchDB 一起使用时,Cloudant Sync 支持在本地和远程数据更改时自动进行增量同步。 Cloudant Sync 还具有一个强大而灵活的模型,该模型取自 CouchDB,用于异步解决在不同服务器和设备上同时进行的更改。当一起使用时,Cloudant Sync + Cloudant/CouchDB 是一个强大的组合,并使用可靠且长期生产的同步协议。

正如您所发现的,JSONStore 另一方面,对于它的远程数据库是什么更加不可知。然而,这样做的代价是同步成为一个相当手动的过程——但重要的是,JSONStore 的数据模型提供了显着帮助该过程的功能。

这里的关键是 JSONStore 可以告诉您本地更改的文档,因此您可以增量上传仅更改的数据。但是除非您的远程数据库支持将更改的数据流式传输到客户端的类似功能,否则您必须发送完整的数据快照或在数据模型中包含必要的数据以允许仅发送更改的数据(并实现服务器端件以允许对其进行查询和计算)。 JSON商店不支持开箱即用的冲突解决。

我们提供了类似的客户端可访问挂钩,用于在 Cloudant Sync 中处理本地更改的数据——这些由我们自己的同步引擎使用——但它们的形式比 JSONStore 的更原始且记录更少,因此我们通常建议坚持使用记录更好的 JSONStore。如果您想试用 Sync 的挂钩,iOS 版本的文档是 here.

总而言之,如果您正在使用 Cloudant/CouchDB,我建议您使用 Cloudant Sync。如果您正在使用其他数据存储,JSON存储可能更容易上手。

安全

JSONStore 和 Cloudant Sync 都支持在客户端加密数据。两者都使用 SQLCipher 来加密 JSON 数据。此外,Cloudant Sync 可以存储 "attachments" —— 与 JSON 数据关联的小二进制 blob —— 这些数据也是加密的。 JSON商店无法存储二进制数据。

当与 MobileFirst 的客户端 SDK 一起使用时,JSONStore 可用于 MF 支持平台上的 FIPS 140-2 解决方案。 MF 为此提供了一个独立的 OpenSSL 二进制文件。

Cloudant Sync 在 iOS 上使用 SQLCipher 和 CommonCrypto。可以在 FIPS 140-2 版本中购买 SQLCipher,并与 Cloudant Sync 一起使用。 CommonCrypto 的某些版本已通过 FIPS 140-2 验证(有关更多信息,请参阅 Apple 文档)。 iOS 的 Cloudant Sync 专门使用 FIPS 140-2 强制加密套件,并自行选择它们。

在 Android,Cloudant Sync 再次使用 SQLCipher,开发人员可以使用相同的 FIPS 140-2 版本进行集成。 Android Sync 使用 javax.crypto 来加密附件,但是,供应商通常不在 FIPS 140-2 验证版本中提供。同样,同步代码使用 FIPS 140-2 授权套件(在撰写本文时!)。

这意味着 Cloudant Sync 的情况更加复杂,我们还不能完全确认我们的状态 w.r.t。 FIPS 140-2。但是,JSONStore 和 Cloudant Sync 中使用的设备上加密的实际安全性是相同的。

这里的总结基本上是,如果您不需要 FIPS 140-2,请选择更适合您的需要或具有您需要的功能的库。 JSON目前推荐商店满足 FIPS 140-2 要求,因为它已经过全面审查。

平台支持和混合

JSON商店支持多种平台。 Cloudant Sync 专用于 iOS 和 Android。

JSONStore 可用于针对其支持平台的混合应用程序。如果不手动包装库,Cloudant Sync 还不能。

JSON商店的实际实现是每个平台的本机,所以如果您使用 iOS 或 Android,选择主要是基于其他因素的选择。

PouchDB

与 Cloudant Sync 类似,PouchDB 可以与 Cloudant 和 CouchDB 同步。作为一个 JS 库,它可以很容易地用于混合应用程序。不幸的是,我对它不是很熟悉,所以不能对任何权威说更多:-/