Основите на системата за ревизия в стил CouchDB, които правят базата данни уникална (част 3 от 10)

В „първа част“ от тази серия разгледахме Cloudant JSON, а във „втора част“ видяхме как се прави _id. В тази част ще се съсредоточим върху скромния токен _rev.

Когато създавате документ за първи път, не е нужно да се притеснявате за токена _rev — той се генерира за вас и ви се връща в разписката.

Ако създадем нов документ с тяло {"a":1,"b":2}, получаваме отговор от базата данни на:

Можем да видим _id и _rev, ако извлечем документа:

Полетата, започващи с долната черта _, са запазени за специфични за Cloudant цели. Не можете да добавите собствено персонализирано поле _name например.

Какво представлява токенът _rev?

Токенът _rev се състои от две части, разделени с тире -:

  • число, което се увеличава с всяка версия на документа
  • низ от 32 знака, който е криптографски хеш на тялото на документа.

Защо Cloudant има токен _rev?

Токенът _rev следи ревизиите, през които един документ преминава през живота си:

  1. Първа редакция 1–25f9b97d75a648d1fcd23f0a73d2776e
  2. Втора редакция 2–524e981baaeec9bbecf92c4c01242308
  3. Трета редакция 3-e95ca5ca4dc5407fd09b8e0e0acf25fd

Cloudant всъщност съхранява ревизии в дървовидна структура от данни, като най-простата форма е непрекъснато нарастващ списък с ревизии:

Нещата могат да станат много по-сложни от това, когато говорим за „конфликти“, но това е за друг път.

Що се отнася до това защо данните се съхраняват по този начин, това е защото Cloudant е създаден да работи като разпределена база данни с данни, съхранявани в много възли в клъстер. Разпределените системи са сложни и дървото на ревизиите позволява на базата данни да обработва конфликтни записи, без да губи данни, по-скоро както Git не би загубил данни при конфликтно сливане. Ревизионното дърво също е от съществено значение при репликиране на данни от едно местоположение на друго. Две бази данни във всяко състояние могат да бъдат копирани във всяка посока без загуба на данни, благодарение на ревизионното дърво.

Мога ли да използвам дървото на ревизиите като система за контрол на версиите за моите документи?

No.

Cloudant не пази телата на старите ревизии (те се унищожават в процес, наречен „компактиране“), но историята на токените на ревизиите се запазва.

Изтриването на документ създава друга ревизия

Документ на Cloudant никога не може да бъде изтрит. Когато направите „изтриване на API извикване“, друга ревизия се добавя в края на дървото:

  1. Първа редакция 1–25f9b97d75a648d1fcd23f0a73d2776e
  2. Втора редакция 2–524e981baaeec9bbecf92c4c01242308
  3. Трета редакция 3-e95ca5ca4dc5407fd09b8e0e0acf25fd
  4. Четвърта редакция 4-d0b8f4e0375c952eb957de7dc1947aef

Последната редакция ще изглежда така:

Изтриването на документ оставя тази последна редакция и дървото на ревизионните токени зад гърба.

Не ме интересуват жетоните за ревизия - накарайте ги да изчезнат

Не можете наистина да накарате токените за ревизия да изчезнат, но има библиотеки, насочени към нови начинаещи, които ги скриват от вас, за да можете да продължите със създаването на приложението си. Разгледайте cloudant-quickstart, който прави точно това.

Дори ако слагате пръсти в ушите си и се преструвате, че ревизионните токени не съществуват, те все още се записват в базата данни, така че трябва да се опитате да избегнете модифицирането на един и същ документ отново и отново, ако е възможно, и имайте предвид, че изтрит документ оставя част от данните след себе си.

Следващият път

В следващата част ще разгледаме използването на HTTP API на Cloudant с помощта на инструмента за команден ред curl.