1

我已经阅读了很多关于CouchDB(和PouchDB)的内容,但我仍然不确定对于我的项目来说最好的选择是什么。

根据我目前所读到的内容,我确实有一种可能的方法来解决我脑海中的项目,但我不确定性能等问题,并且很想获得一些见解。或者也许有更好的地方来问这个问题?如果是这样,请告诉我!(已经尝试过他们的 IRC 频道和邮件列表,但目前还没有答案)

所以该项目基本上是一个“离线优先”的移动应用程序。用户是设备安装人员。他们每天被分配几个位置和设备来安装。他们需要在建筑物周围走动并更新数据(例如,设备 X 已安装在位置 Y;或者位置 C 上的设备 B 的属性 A 已更改为 D,等等...)

有关基本数据的更多信息。

  • 有用户,他们是设备安装人员。他们需要登录应用程序。
  • 有位置,设备安装人员需要访问的所有地方。
  • 有设备,用户可以安装所有不同的设备。
  • 有待办事项,基本上是针对特定设备在特定位置为特定用户进行的计划安装。

当然,我试图简化数据,但这应该包含要点。

现在,这些是应用程序的重要特征:

  • 管理员(后端软件)可以更改用户、位置和设备。
  • Todos 可以由管理员(后端软件)计划。
  • 应用程序用户(设备安装程序)只能看到他/她自己的今天 + 1 周前的待办事项/计划。
  • 多个应用程序用户(设备安装程序)可能被分配到相同的位置和/或待办事项,因为对于大型建筑物可能有多个安装程序在工作。
  • 在使用的每个应用程序中的数据与全局数据库之间的自动同步。
  • 安全,用户 X 应该只能请求他/她自己的待办事项/计划。

考虑到这些特征,我目前有以下想法:

  • 一个包含所有用户、位置、设备、待办事项的全球“主”数据库。
  • 使用选择器对象过滤复制/同步,该选择器对象为每个用户仅复制该特定用户可访问的数据。
  • 使用 PouchDB 的 Ionic 应用程序与他/她自己的用户数据库进行完全/正常复制/同步。

我是否正确假设以下内容?

  • 使用 PouchDB 的应用程序的用户将拥有对他自己的已在服务器端过滤的用户数据库的完全读取权限?
  • 对于更新数据,我可以使用 validate_doc_update 来检查用户是否可以修改某些内容?
  • 对 PouchDB 数据库所做的任何更改都将复制到“用户”数据库中吗?
  • 然后这些更改也会从“用户”数据库复制到全局“主”数据库?
  • 对全局“主”数据库所做的任何更改都将复制到“用户”数据库,但仅在需要时(仅当该用户有新/更改(/删除)文档时)?
  • 然后这些更改也会从“用户”数据库复制到移动应用程序的 PouchDB 数据库吗?

如果这一切都成立,那么它可能非常适合这个项目。至少我是这么认为的?(如果我错了,请纠正我!)但我确实读过一些关于过滤复制的“性能”问题。假设有数百个用户(设备安装人员)(现在没有这么多,但将来可能会有)。那么,为数百个“用户”数据库运行这种过滤复制会不会有问题?我确实读过 CouchDB 2.0 和 2.1 有一个选择器对象进行过滤复制,而不是通常的 JS MapReduce,后者应该快 10 倍。但我的问题仍然是:即使对于数百个(甚至数千个)“过滤”数据库,这是否有效?我对底层算法和限制知之甚少,但我想知道对全局“主”数据库的任何更改是否需要运行昂贵的计算来确定要复制到哪些“过滤”数据库。如果确实如此……这在实践中是否重要?

请,任何建议都将受到欢迎。我也考虑过使用其他数据库。我的第一种方法实际上是使用关系数据库。但是这个应用程序的必需特性之一必须是实时同步。过去,我自己可以使用 RDBMS 中的修订字段和大量代码来处理这个问题,但我真的更喜欢像 CouchDB/PouchDB 这样优雅的东西来进行同步。这确实是一个可以让我省去很多头痛的领域。记住这一点,我有什么选择?我是否走在一条可能的正确道路上,或者性能是否会成为未来的问题?

另请注意,我还考虑过为每个用户使用单独的数据库(“每个用户一个数据库”),但我认为它可能不是最适合这个项目的,因为一些待办事项可能会分配给多个用户并且当一个用户更新时待办事项,也必须为其他用户更新。

希望一些 CouchDB 专家可以对我的问题有所了解。非常感激!

我知道可能会有一些争论,但我只对其他人的事实和专业知识感兴趣。

4

0 回答 0