PouchDB / CouchDB中_id的最佳做法

时间:2017-02-26 20:02:31

标签: couchdb pouchdb nosql

TL; DR:如果选择在文档的address中使用lastname_id等字段,您如何处理address的更新和lastname以多设备,有时是离线环境进行扩展的方式。

我正在寻找使用文档_id中可能在将来发生变化的字段时的最佳做法。例如,address和/或lastname。客户的地址不仅可以更改,而且如果用户错误地输入了错误的地址,该怎么办?如果在文档跨设备复制并在多个设备上更新之后才发现错误怎么办?

有没有办法处理_id的更新?例如,使用新的_id创建一个全新的文档并删除旧文档?但这在多设备,有时是离线世界中是否会扩展?

例如:

{
  "_id": "Jane-Smith",
  "address": "44 street, Boston, MA 93999",
  "telephone": "8888888888"
}

要处理多个客户名称相同的情况,是否有必要在客户名称中添加内容?

{
  "_id": "Jane-Smith-7ae78c",
  "address": "44 street, Boston, MA 93999",
  "telephone": "8888888888"
}

优点:

  1. 节省空间
  2. 由于_id是主键,因此使用_id进行搜索的速度更快
  3. 缺点:

    1. 如果_id中使用的属性发生了变化,该怎么办?将对陈旧数据执行搜索。如果使用更新的_id创建新文档,那么可能已进行脱机更改的同步数据库中的实现有哪些?
    2. 更新

      这篇文章很有帮助:

      https://davidcaylor.com/2012/05/26/can-i-see-your-id-please-the-importance-of-couchdb-record-ids/

      我没有意识到_ids可能由address lastname组成。 但是,如果客户的地址和/或名称发生变化,该怎么办?

      我正试图围绕在PouchDB / CouchDB中存储customer数据的正确方法。

1 个答案:

答案 0 :(得分:5)

如果您的ID包含经常更改的信息,那么最好不要将该信息存储在ID中。将尽可能多的用户信息打包到ID中的优化是一个很好的优点,但如果该信息发生变化则会崩溃,因为一旦id发生变化,您就无法真正跟踪对该文档的更改,因为它实际上已成为新文档

在你的情况下,你可能应该将id设为其他内容(随机,偶数),然后使用mapreduce / pouchdb-find进行查询。