PouchDB / CouchDB 中 _id 的最佳实践

Best practices for _id in PouchDB / CouchDB

TL;DR:如果选择在文档的 _id 中使用 addresslastname 等字段,您如何处理对 addresslastname 以一种在多设备、有时是离线环境中扩展的方式。


我正在寻找在文档 _id 中使用字段的最佳实践,这些字段将来可能会发生变化。例如,address and/or 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. 节省 space
  2. 由于 _id 是主键,使用 _id 的搜索速度更快

缺点:

  1. 如果 _id 中使用的属性发生变化怎么办?将对陈旧数据执行搜索。如果您使用更新后的 _id 创建新文档,可能进行离线更改的跨同步数据库的实现是什么?

更新:

这篇文章很有帮助:

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

没想到_ids可以由addresslastname组成。 但是,如果客户的地址 and/or 姓名发生变化怎么办?

我正在努力思考在 PouchDB / CouchDB 中存储 customer 数据的正确方法。

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

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