假设我有一个KVS数据库,其中键是文档ID。文档是JSON和XML,可以在其中获取文档ID。例如:
c62a3ecd-696b-4c9e:{"document-id": "c62a3ecd-696b-4c9e", ... }在这两种情况下都有ID是好的做法吗?
如果没有,是否应该将其放置在JSON/XML中?我们怎么知道数据库是否腐败?
如果是的话,每个检索都需要重复检查它们是相同的吗?
发布于 2020-01-13 17:29:41
复制KV数据库的JSON或XML值中的标识符不是一个好主意。它将复制信息,如果您“克隆”文档,它可能会变得不同步。也就是说,如果要基于先前存储的文档插入新文档,则需要更新document["uid"]字段。
简单地说,您不需要在值中存储UID,因为它已经存储在键中。
但是,在代码中,当检索给定对象时,可以将其与标识符关联。以便您可以更新正确的记录文档。
在JavaScript中,您将得到以下结果
function ref(uid) { /* retrieve the JSON document with the given UID */ }
function update(uid, object) { /* update the record UID with the JSON object OBJECT */ }
// let's say you know the identifier (UID) of a document, you can retrieve
// it with the `ref` function
let uid = 'P4X432'
let myDocument = ref(uid)
// update one field of the document
myDocument["website"] = "https://hyper.dev"
// now you need to save it, re-use the original identifier
update(uid, myDocument)因此,最终,您可能会得到一个JavaScript对象或类似于以下内容的类:
myDatabaseRecord = {
"uid": "P4X432",
"document": {
"website": "https://hyper.dev", ...
}
}mongodb客户端就是这样做的。如果我没记错的话,在nodejs客户端库中,objectid使用一个特殊的键$id来描述文档的标识符,例如:
object = {
"$id": "P4X432",
"website": "https://hyper.dev",
...
}除了$id之外,所有东西都将存储在KV数据库的值中。该appraoch的工作范围,它将需要做的部分副本(!)要构建将存储在数据库中的JSON文档(注意:在这种情况下不可能发生变异),您将得到性能较差的代码。
代码中的活动与数据库中的活动是不同的。要记住的重要一点是,在代码中需要跟踪文档的标识符。
https://stackoverflow.com/questions/59699878
复制相似问题