Es scheint, Sie können Transaktionen in Riak tun. Wie stellt man sicher, dass die Daten korrekt sind?Stellen Sie Korrektheit in Riak sicher?
Sagen wir, wir möchten einen Kommentar einfügen. In redis würde ich tun
commentId=incr commentCount
multi
SET comment_post:commentId postId //for later use when we flag comments. We'll need to know where in the db it is
RPUSH post_comment:postId binaryValue //contains commentId in it + comment body
exec
in SQL würde einfügen i eine neue Zeile in einem Kommentar Tabelle mit dem Text und Post-ID. Beide verwenden mehr als eine Aussage. Wie füge ich den Kommentarkörper ein und verbinde ihn mit dem Kommentar in Riak, da er keine Transaktionen hat?
Ein anderes Problem ist, wenn ich einen Beitrag modifiziere. Wie aktualisiere ich die Post und aktualisiere die Tag-Liste der Post mit diesem Tag
Ich weiß nicht viel über Riak, als ich einen kurzen Blick darauf warf. Wenn ich die Grundlagen oder mehr kenne, werde ich dort posten, aber nicht sofort. Ich möchte eine allgemeine Idee bekommen, wofür es geeignet ist, da ich herausgefunden habe, dass redis schlecht ist, eine db zu sein, da es in der Lage sein muss, alles in Erinnerung zu behalten. Ich weiß nichts über 'vector clocks', aber du hast gerade gesagt, dass ich mehrere Werte für einen Schlüssel haben kann, der komisch klingt, aber ich werde so tun, als wäre riak ziemlich effizient. Also ist Riak so konzipiert, dass alle Konsistenz-Logik von der App durchgeführt wird? Das ist interessant –
Ich habe ein bisschen gelesen. Ich bin ein wenig verwirrt bc das Beispiel zeigte Einstellung allow_mult auf True gesetzt ist. Was passiert also, wenn ich etwas habe, das einen Schreibkonflikt hat und falsch ist? Es klingt also so, als hätte alles eine vclock drin? Es scheint, dass Sie den Schreibzugriff hoch machen. Ich kann den Gebrauch und den Kompromiss dort sehen. Ich kann mir vorstellen, wie ich Dinge für meine Bedürfnisse lösen und korrigieren kann, aber ich kann mir nicht vorstellen, was passiert, wenn ich Multis nicht gesetzt habe und es falsch ist? Wird einer den anderen überschreiben? Wird es scheitern? Ich kann sehen, wie man mit Dingen umgeht, wenn es scheitert (aber ich muss andere Schreiboperationen rückgängig machen) –
aber ich kann nicht sehen, was passiert, wenn es nicht scheitert und ein Job beendet, während der andere Job gestartet und ein bisschen danach beendet hat und Daten überschrieben hat . –