PouchDB / CouchDB 中 _id 的最佳实践
Best practices for _id in PouchDB / CouchDB
TL;DR:如果选择在文档的 _id
中使用 address
和 lastname
等字段,您如何处理对 address
和 lastname
以一种在多设备、有时是离线环境中扩展的方式。
我正在寻找在文档 _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"
}
优点:
- 节省 space
- 由于
_id
是主键,使用 _id
的搜索速度更快
缺点:
- 如果
_id
中使用的属性发生变化怎么办?将对陈旧数据执行搜索。如果您使用更新后的 _id
创建新文档,可能进行离线更改的跨同步数据库的实现是什么?
更新:
这篇文章很有帮助:
https://davidcaylor.com/2012/05/26/can-i-see-your-id-please-the-importance-of-couchdb-record-ids/
没想到_ids
可以由address
和lastname
组成。 但是,如果客户的地址 and/or 姓名发生变化怎么办?
我正在努力思考在 PouchDB / CouchDB 中存储 customer
数据的正确方法。
如果您的 ID 包含经常更改的信息,那么最好不要将该信息存储在 ID 中。将尽可能多的用户信息打包到 id 中的优化是一个很好的优化,但如果该信息发生变化,它就会崩溃,因为一旦 id 发生变化,您就无法再真正跟踪对该文档的更改,因为它实际上变成了一个新文档.
在您的情况下,您可能应该将 id 设置为其他内容(随机,偶数),然后使用 mapreduce/pouchdb-find 进行查询。
TL;DR:如果选择在文档的 _id
中使用 address
和 lastname
等字段,您如何处理对 address
和 lastname
以一种在多设备、有时是离线环境中扩展的方式。
我正在寻找在文档 _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"
}
优点:
- 节省 space
- 由于
_id
是主键,使用_id
的搜索速度更快
缺点:
- 如果
_id
中使用的属性发生变化怎么办?将对陈旧数据执行搜索。如果您使用更新后的_id
创建新文档,可能进行离线更改的跨同步数据库的实现是什么?
更新:
这篇文章很有帮助:
https://davidcaylor.com/2012/05/26/can-i-see-your-id-please-the-importance-of-couchdb-record-ids/
没想到_ids
可以由address
和lastname
组成。 但是,如果客户的地址 and/or 姓名发生变化怎么办?
我正在努力思考在 PouchDB / CouchDB 中存储 customer
数据的正确方法。
如果您的 ID 包含经常更改的信息,那么最好不要将该信息存储在 ID 中。将尽可能多的用户信息打包到 id 中的优化是一个很好的优化,但如果该信息发生变化,它就会崩溃,因为一旦 id 发生变化,您就无法再真正跟踪对该文档的更改,因为它实际上变成了一个新文档.
在您的情况下,您可能应该将 id 设置为其他内容(随机,偶数),然后使用 mapreduce/pouchdb-find 进行查询。