PouchDB / CouchDB中_id的最佳做法

Rap*_*nah 0 couchdb nosql pouchdb

TL; DR:如果选择使用文档的addresslastname中的字段_id,您将如何处理在多设备(有时是脱机)环境中的扩展address以及lastname扩展方式。


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

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

例如:

{
  "_id": "Jane-Smith",
  "address": "44 street, Boston, MA 93999",
  "telephone": "8888888888"
}
Run Code Online (Sandbox Code Playgroud)

要处理有多个同名客户的情况,在客户名中添加一些内容是否有意义?

{
  "_id": "Jane-Smith-7ae78c",
  "address": "44 street, Boston, MA 93999",
  "telephone": "8888888888"
}
Run Code Online (Sandbox Code Playgroud)

优点:

  1. 节省空间
  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可以由address 组成lastname但是,如果客户的地址和/或名称发生变化怎么办?

我正在设法把正确的方法存储customer在PouchDB / CouchDB中。

nla*_*son 5

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

在您的情况下,您可能应该将ID设置为其他名称(甚至是随机数),然后使用mapreduce / pouchdb-find进行查询。