CouchDB / PouchDB是我项目的可行解决方案吗?欢迎任何建议

时间:2017-08-27 09:22:03

标签: couchdb pouchdb couchdb-2.0

我一直在阅读很多关于 CouchDB (以及 PouchDB )的内容,我仍然不确定我的项目最佳选择是什么。

根据我到目前为止所阅读的内容,我确实有可能在脑海中解决该项目,但我不确定性能之类的内容,并希望获得一些见解。 或许还有更好的地方可以提出这个问题?如果是这样的话请告诉我!(已经尝试过他们的IRC频道和邮件列表,但到目前为止还没有答案)

因此该项目基本上是'离线优先'移动应用程序。用户是设备安装程序。他们每天都会分配一些位置和设备进行安装。他们需要在建筑物周围走动并更新数据(例如,设备X已安装在位置Y;或者位置C上设备B的属性A已更改为D等,等等)

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

  • 有用户,他们是设备安装人员。他们需要登录应用程序。
  • 有位置,设备安装人员需要访问的所有位置。
  • 有些设备,用户可以安装所有不同的设备。
  • 有todos,基本上是针对特定设备的特定位置的特定用户的计划安装。

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

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

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

考虑到这些特征,我现在考虑以下因素:

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

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

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

如果这一切都成立,那么它可能非常适合这个项目。至少我是这么认为的? (如果我错了,请纠正我!)但我确实读过一些'表现'关于过滤复制的问题。假设有数百个用户(设备安装程序)(现在还没有这么多用户,但未来可能会有这样的用户)。那么,为数百个“用户”运行此过滤后的复制会是一个问题吗?数据库?我确实读过有关选择器对象的CouchDB 2.0和2.1来进行过滤复制,而不是通常的JS MapReduce,它应该快10倍。但我的问题仍然是:这是否运作良好,即使对于数百(甚至数千)的过滤'数据库?我对基础算法和限制知之甚少,但我想知道是否有任何改变对全球'大师'数据库执行或不需要昂贵的计算来决定哪个'过滤'要复制到的数据库。如果确实如此......在实践中是否重要?

请欢迎任何建议。我也考虑过使用其他数据库。我的第一种方法实际上是使用关系数据库。但此应用程序所需的特性之一必须是实时同步。在过去,我已经能够使用RDBMS中的修订字段和大量代码来处理这个问题,但我真的更喜欢像CouchDB / PouchDB一样优雅的同步。这真的是一个可以让我头疼的地方。记住这一点,我有什么选择?我是否会走上正确的道路,或者表演会成为一个问题吗?

另请注意,我还考虑过为每个用户('每个用户一个数据库')设置单独的数据库,但我认为它可能不适合这个项目,因为一些待办事项可能被分配给多个用户,当一个用户为待办事项更新某些东西时,它也必须为其他用户更新。

希望CouchDB的一些专家能够对我的问题有所了解。非常感谢!

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

0 个答案:

没有答案