【问题标题】:Is it possible to get the latest seq number of PouchDB?是否可以获得 PouchDB 的最新 seq 数?
【发布时间】:2018-04-24 23:14:53
【问题描述】:

我正在尝试解决 CouchDB 回滚的问题,从而导致 PouchDB 在未来出现。我想找到一种方法来检测这种情况并在发生这种情况时强制 PouchDB 销毁并重新加载。

有没有办法向 PouchDB 询问它当前的 pull seq 编号?我根本找不到任何文档。我的 google-foo 不够强大。

到目前为止,我唯一的想法是观看 sync.on(change) 提要,并在每次拉取时记录 seq 编号。然后在应用重新加载时,以 ajax https:/server/db/_changes?descending=true&limit=1 运行它并验证返回的 seq 号是否高于我存储的 seq 号。如果存储的 seq 更高,则 pouchdb.destroy(),从 indexdb 中清除 _pouch_,并可能弄清楚如何删除此版本的 websql 版本https://github.com/pouchdb/pouchdb/releases/tag/6.4.2

或者有没有更好的方法来解决 PouchDB 在未来领先于 CouchDB 的情况?

【问题讨论】:

  • 拜托,你能解释一下在 CouchBD 中回滚的想法吗?哪个是确切的情况?即使您在 PouchDB 中有更高的序列,PouchDB 也会在每次复制后同步最后一个序列
  • 灾难性硬件故障和 CouchDb 从备份中恢复。或者在我们的测试环境中,Catastrophic 的测试数据被回滚到 live 的副本中再次进行测试。我发现 PouchDb 停止同步,直到 CouchDb seq 赶上 PouchDb 的预期。当然,CouchDb 也会刷新以清除墓碑。
  • 更清楚地说,假设我的个人资料是修订版 170,然后 CoucDb 回滚并且我的个人资料是版本 120。PouchDb 没有看到这种变化,它加载了它自己的 170 副本,不推动它,当下一次更改是版本 121 时会感到非常困惑。
  • @JuanjoRodriguez 如果 PouchDb 不关心序列号。理论上,我是否可以通过简单地使用脚本来运行所有相关文档,将它们拾取并使用新修订版将它们放回原处,从而进行更改并触发 pouchDb 获取最新更改来解决此回滚问题?
  • 在这种情况下,您可能会遇到文档冲突。您的复制是拉式、推式还是两者兼而有之?

标签: couchdb pouchdb


【解决方案1】:

问题似乎出在复制检查点文档中。当您从备份中恢复数据库时,您可能也在恢复检查点本地文档。

您应该删除所有本地文档,方法是使用 _local_docs 端点找到它们,然后从恢复的数据库中删除它们。

这样做,您的 PouchDB 应该尝试将他们的文档同步回 PouchDB 和 CouchDB 发送到 CouchDB。

【讨论】:

  • 很有趣,所以运行这个https://server/db/_local_docs,遍历“rows”以获取id "_local/iy183t4BF_SQwHOezT1KmA==" 并使用该ID 发送删除?虽然我不一定希望 PouchDb 推迟更改,但也可以自行回滚。
  • 是的,当 PouchDB 试图找到 Checkpoint 并且它不存在时,复制从头开始
  • 这会导致 pouchDb 也回滚吗?在我的示例中,重新检索旧的配置文件?我很困惑为什么如果检查点存储在数据库中它不会意外地这样做,那么它们也应该被回滚,或者实际上被删除。而且既然 pouchDb 停止的检查点已经不存在了,不应该回滚吗?或者 pouchDb 是否需要在它起作用之前删除每个检查点?另外,它需要什么东西来触发它的动作吗?该文档有 325,923 行!哇
  • 这会导致 PouchDb 也回滚吗?不,可能 PouchDB 中的文档会发送到 CouchDB。
  • 嗯,是的,在这种情况下我也需要 PouchDb 回滚。或者至少能够检测到问题并销毁->重新创建自身。
猜你喜欢
  • 2019-11-27
  • 2018-04-03
  • 1970-01-01
  • 2020-06-24
  • 1970-01-01
  • 1970-01-01
  • 2021-11-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多