KVS Должен ли ID быть в документе, если это ключ? - PullRequest
0 голосов
/ 12 января 2020

Предположим, у меня есть база данных KVS, где ключами являются идентификаторы документов. Документы JSON и XML, и в них можно получить идентификатор документа. Например:

c62a3ecd-696b-4c9e:{"document-id": "c62a3ecd-696b-4c9e", ... }

Является ли хорошей практикой использование идентификатора в обоих?

Если нет, должен ли поисковый запрос установить его в JSON / XML? И как мы узнаем, что база данных повреждена?

Если да, нужно ли при каждом поиске дважды проверять, совпадают ли они?

1 Ответ

0 голосов
/ 13 января 2020

Копирование идентификатора в значение JSON или XML базы данных KV не является хорошей идеей. Он будет дублировать информацию и может стать несинхронным c, если вы «клонируете» документ. То есть, если вы хотите вставить новый документ на основе ранее сохраненного документа, вам необходимо обновить поле 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 клиентской библиотеке mongodb objectid используйте специальный ключ $id для описания идентификатора документа, например:

object = { 
  "$id": "P4X432",
  "website": "https://hyper.dev",
  ...
}

Все, кроме $id, будет сохранено в стоимости базы данных KV. Это приложение работает в той степени, в которой ему потребуется сделать частичную копию (!) Для создания документа JSON, который будет храниться в базе данных (примечание: в этом случае мутация невозможна), в результате вы получите меньше код исполнителя.

То, что находится в коде, отличается от того, что находится в базе данных. Важно помнить, что в коде необходимо отслеживать идентификатор документов.

...