2012-09-08 16 views
5

Sembra che tu non possa fare transazioni in riak. Come si garantisce che i dati siano corretti?Garantire la correttezza in riak?

Diciamo che vogliamo inserire un commento. In Redis Farei

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 mi piacerebbe inserire una nuova riga in una tabella commento con il testo e post id. Entrambi usano più di una dichiarazione. Come posso inserire il corpo del commento e associare il post al commento in riak in quanto non ha transazioni?

Un altro problema è se modifico un post. Come aggiorno il post e aggiorno l'elenco di tag del post usando quel tag

risposta

6

Riak è un sistema alla fine coerente progettato per essere disponibile in scrittura e non ha alcun concetto di atomicità; non ci sono contatori atomici o transazioni .

Modifica: Abbiamo rilasciato contatori che utilizzano CRDT in Riak 1.4. Per ulteriori dettagli, vedere Counters in Riak 1.4

L'approccio utilizzato da Riak si basa sulla carta Amazon Dynamo e utilizza gli orologi vettoriali per la risoluzione dei conflitti; è un ciclo di lettura/modifica/scrittura con qualsiasi risoluzione dei conflitti eseguita durante una lettura successiva. In qualsiasi momento è possibile avere più valori per una determinata chiave che verranno restituiti quando si esegue un recupero.

si suona come si vuole guardare al nostro secondary indexes (se sto comprendere lo scenario, il fatto che è necessario un nuovo commentId per un 'come' è un po 'confusa senza sapere di più). Dovresti creare un indice secondario che punta al corpo del tuo commento che viene inviato insieme al corpo stesso quando fai un negozio. Questo risolve almeno la metà del problema.

Come ottenere il vostro commentId è un po 'più complicato. Non è possibile utilizzare un contatore atomico globale perché non li abbiamo. Il tuo design dovrebbe non fare affidamento su ID sequenziali (forse generare UUID?) E forse usare il nostro links?

Se sei interessato e desideri discutere di possibili approcci di progettazione, inviaci un messaggio di ping al numero riak-users mailing list - tutti i nostri tecnici lo leggono e sono sempre felici di rispondere alle domande.

+0

Non so molto di riak come ho dato una breve occhiata a questo. Quando conosco le nozioni di base o più le inserirò lì ma non ora. Voglio avere un'idea generale su cosa è adatto per come ho scoperto redis è male ad essere un db dal momento che deve essere in grado di montare tutto in memoria. Non so nulla di 'Vector Clock 'ma hai appena detto che posso avere più valori per una chiave che suona strana ma farò finta che riak sia abbastanza efficiente. Quindi riak è progettato per avere tutta la logica di coerenza fatta dall'app? Questo è interessante –

+0

Ho fatto un po 'di lettura. Sono un po 'confuso in quanto l'esempio mostrava che allow_mult era impostato su true. Quindi cosa succede se ho qualcosa che ha un conflitto di scrittura ed è falso ... Quindi sembra che tutto abbia un vclock in esso? Sembra che tu abbia reso disponibile la scrittura alta. Posso vedere l'uso e il compromesso lì. Posso immaginare come risolvere e correggere le cose per i miei bisogni ma non posso immaginare/pensare a cosa succede se non ho impostato multis ed è falso? Si sovrascriverà l'altro? Fallirà? Posso vedere come gestire le cose se fallisce (ma dovrò annullare altre scritture) –

+0

ma non riesco a vedere cosa succede se non riesce e un lavoro è finito mentre l'altro lavoro è iniziato e finito un po 'dopo e ha sovrascritto i dati . –

Problemi correlati