PouchDB / Ionic 1 / CouchDB - 架构建议

时间:2017-03-21 19:23:25

标签: ionic-framework architecture couchdb pouchdb

我有一个使用Ionic 1PouchDBCouchDB开发的多用户单页移动应用。用户的管理是通过SuperLogin实现的。

我想根据每个用户的当前数据添加一个功能计算得分(类似于 Waze 应用中的得分),并保留一个每天跟踪该分数的前值。

我想知道实现这一目标的最佳方式。

关于我的应用:

它应该能够脱机工作,然后在线时与服务器同步(这就是为什么我使用PouchDB和CouchDB,到目前为止工作得很好)。所以在服务器上,每个用户有一个CouchDB数据库,存储自己的数据 在服务器上。应用程序中的PouchDB数据库正在与服务器上的用户同步。

我正在考虑分数的各种选项,但没有一个真的让我满意,所以你的建议会受到欢迎(可能是另一种选择)

选项1 :分数是通过Ionic代码在应用中计算的。结果存储为本地数据库对象,具有日期和分数值。只要用户更改其数据,就会发生这种情况当数据库与服务器同步时,这些分数也会在服务器中更新。但是,如果某些天用户不使用该应用程序,则这些天不会计算得分。此外,如果用户在2个不同的设备上运行应用程序,并更新其中一个设备上的某些数据,这将使得分数在本地重新计算,然后在服务器上传播。当更改的数据传播到服务器和其他设备时,这将在此其他设备上触发新的分数计算,并可能导致服务器中的分数对象发生冲突。最后,如果在某个时间点,我想改变计算得分的方式,给每个用户的价值将取决于他是否已升级到最新的应用版本。

选项2 :拥有每天触发的服务器端进程,并通过连接到服务器上每个用户的数据库,读取其数据,计算相应的分数以及存储来计算每个用户的分数它(日期+值)回到服务器DB中。这个选项对我来说看起来更干净,但它需要进一步的开发,以及在服务器上维护和保持活力的额外过程。如果用户在未连接到互联网的情况下向应用程序输入数据,则在应用程序再次连接之前,应用程序中的分数不会更新(这会导致服务器进程重新计算分数,并通过应用程序将其传播回应用程序CouchDB同步)

选项3 :在CouchDB服务器中使用某种“存储过程”,每次相关数据发生变化时触发,负责计算每个用户的得分。但我不认为这对CouchDB来说是可行的。

那你怎么做这个分数计算? 非常感谢!

0 个答案:

没有答案