Non esiste un'unica operazione "incrementAndGet" in Cassandra parsimonia API.
I contatori in Cassandra sono alla fine coerenti e non atomici. Per ottenere il valore del contatore "garantito per essere aggiornato", è necessario eseguire un'operazione ConsistencyLevel.ALL fragile, ovvero eseguire una lettura coerente. ConsistencyLevel.QUORUM non è sufficiente (come specificato nel documento di progettazione dei contatori: https://issues.apache.org/jira/secure/attachment/12459754/Partitionedcountersdesigndoc.pdf).
Per implementare il metodo incrementAndGet che sembra coerente, si potrebbe desiderare in un primo momento leggere controvalore, quindi emettere incremento mutazione, e il ritorno (valore letto + inc).
Ad esempio, se il valore del contatore precedente è compreso tra 10 e 20 (su repliche diverse) e uno aggiunge 50 ad esso, read-before-increment restituirà 60 o 70. E il read-after-increment potrebbe ancora restituire 10 o 20.
Approccio molto interessante, grazie! – tom
come risolverà il problema dei contatori che non sono atomici. Ad esempio, se eseguo un'altra operazione (incremento e lettura), è possibile che continui ad ottenere il vecchio valore: chiamata 1: contatore val: 1 lettura (ottiene 1), incremento di 1 (chiamata emessa), restituire 2 chiamata 2: (l'ultima chiamata di incremento non si è propagata attraverso tutti i nodi) read (gets 1), incremento di 1 (chiamata emessa), return 2 –
@AlastorMoody: Come detto, questo metodo consente implementare contatori che * sembrano * coerenti. Dal momento che i contatori cassandra alla fine sono coerenti per natura, è possibile rendere i contatori atomici solo al prezzo di un impatto significativo sulle prestazioni (vale a dire con i blocchi distribuiti). Se hai davvero bisogno di contatori atomici - ci sono molti strumenti a parte Cassandra (come Redis) – Wildfire