Database Reference
In-Depth Information
gut passen würde. Die Experten bewerten jeden Hund mit einem Wert von
1 (kein guter Kandidat) bis 4 (der perfekte Kandidat). Unsere drei Hundeex-
perten - wir nennen Sie Bob, Jane und Rakshith - müssen eine einstimmige
Entscheidung fällen.
Jeder Experte hat einen eigenen Client, der mit dem Datenbankserver ver-
bunden ist, und jeder Client trägt eine eindeutige Client-ID in jeden Request
ein. Diese Client-ID wird genutzt, um die Vektoruhr aufzubauen, und hält
gleichzeitig den Client im Objekt-Header nach, der zuletzt ein Update durch-
geführt hat. Wir sehen uns zuerst ein einfaches Pseudocode-Beispiel an und
wollen dieses Beispiel dann später in Riak umsetzen.
Bob erzeugt das Objekt zuerst und gibt die respektable Bewertung 3 für einen
neuen Hund namens Bruiser ab. Die Vektoruhr kodiert seinen Namen und
die Version 1.
vclock: bob[1]
value: {score : 3}
Jane ruft diesen Datensatz ab und bewertet Bruiser mit 2. Die für ihr Update
erzeugte vclock erfolgte nach Bobs Eintrag, weshalb ihre erste Version an das
Ende des Vektors angehangen wird.
vclock: bob[1], jane[1]
value: {score : 2}
Gleichzeitig hat Rakshith die von Bob (und nicht von Jane) erzeugte Version
abgerufen. Er liebt Bruiser und bewertet ihn mit einer 4. Genau wie bei Jane
wird sein Client-Name an das Ende der Vektoruhr als Version 1 angehangen.
vclock: bob[1], rakshith[1]
value: {score : 4}
Später an diesem Tag sieht sich Jane (als Leiterin der Bewertungsrunde)
die Bewertungen nochmal an. Da Rakshiths Update-Vektor nicht nach Jane,
sondern gleichzeitig erfolgte, stehen die beiden Updates in einem Konflikt,
der aufgelöst werden muss. Sie erhält beide Werte und es liegt an ihr, den
Konflikt aufzulösen.
vclock: bob[1], jane[1]
value: {score : 2}
---
vclock: bob[1], rakshith[1]
value: {score : 4}
Search WWH ::




Custom Search