PockDB/CouchDB中_id的最佳实践

PockDB/CouchDB中_id的最佳实践,couchdb,pouchdb,nosql,Couchdb,Pouchdb,Nosql,TL;DR:如果选择在文档id中使用地址和姓氏等字段,您如何处理地址和姓氏的更新,以便在多设备(有时是脱机环境)中进行扩展 我正在寻找在文档id中使用字段的最佳实践,这些字段将来可能会更改。例如,地址和/或姓氏。不仅客户的地址可以更改,而且如果用户错误地输入了错误的地址该怎么办?如果在跨设备复制文档并在多个设备上更新之后才发现错误,该怎么办 有没有办法处理对_id的更新?例如,创建一个具有新id的全新文档并删除旧文档?但在一个多设备、有时是离线的世界中,这种规模会扩大吗 例如: { "_id

TL;DR:如果选择在文档id中使用地址和姓氏等字段,您如何处理地址和姓氏的更新,以便在多设备(有时是脱机环境)中进行扩展

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

有没有办法处理对_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"
}
优点:

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

如果_id中使用的属性发生更改怎么办?将对过时数据执行搜索。如果使用更新的_id创建新文档,那么同步数据库中可能进行脱机更改的实现是什么? 更新:

这篇文章很有帮助:

我没有意识到ID可以由地址和姓氏组成。但是,如果客户的地址和/或姓名发生变化怎么办


我正在尝试用正确的方法将客户数据存储在PockDB/CouchDB中。

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


在您的情况下,您可能应该将id设置为其他随机项,甚至然后使用mapreduce/PockDB find进行查询。

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


在您的情况下,您可能应该将id设置为其他随机值,甚至然后使用mapreduce/PockDB find进行查询。

是否有必要在您的id中使用诸如Address或lastname之类的字段?为什么不直接使用GUID呢?这应该可以防止冲突和更改您提到的值。节省空间和提高性能很重要,但请记住,过早优化是万恶之源。这正是我的问题。我现在倾向于默认的GUID方法。然而,我也很好奇,在_id中使用可能随时间变化的字段是否被认为是一种好的做法。是否有必要在_id中使用像address或lastname这样的字段?为什么不直接使用GUID呢?这应该可以防止冲突和更改您提到的值。节省空间和提高性能很重要,但请记住,过早优化是万恶之源。这正是我的问题。我现在倾向于默认的GUID方法。然而,我也很好奇,在ID中使用可能随时间变化的字段是否被认为是一种好的做法。