Esiste un db distribuito ad alta disponibilità, eventualmente coerente che supporta l'operazione idempotent su valori scalari?Eventualmente coerente database distribuito con operatore di incremento idempotenziale?
Se si utilizzano gli aggiornamenti normali, è possibile che avremo 2 valori diversi su nodi diversi e nessuno dei valori sarebbe corretto poiché è necessario aumentare gli importi per entrambi i valori di transazione.
C'è un db distribuito in cui posso inviare un comando di aumento (chiave, attributo [colonna], diff) in modo che quando ricevo una risposta posso essere sicuro che quell'operazione verrà eseguita su altre repliche indipendentemente dalla corrente valore dell'account? In questo modo avrò la consistenza finale per aumentare l'operazione anche se 2 nodi diversi sono aumentati di un valore diverso perché quell'aumento si propagherebbe ad altre repliche.
Non sto parlando di aggiornamenti condizionali in quanto non funzionerebbe con l'alta disponibilità db come cassandra (è per questo che non hanno questa caratteristica), mi interessa l'operazione di aumento atomico.
Grazie.
P.S. Nel caso di aumento idempotent avrei un aumento comando (chiave, attributo, diff, lock_key) in modo che db non farebbe aumentare se già ricevuto lo stesso comando con lo stesso lock_key
tl; dr:
C'è un modo per fare un contatore preciso nel database di tipo AP distribuito? 2 problemi: 1) Se invio un'operazione per aumentare un contatore e non ottengo risposta, invierei nuovamente quella richiesta ma non voglio aumentare il contatore due volte. 2) Se quel contatore viene aggiornato nello stesso tempo su un'altra replica, desidero combinare eventualmente questo aumento, non per sovrascrivere i valori. Quindi c'è un comando come aumento ("equilibrio di John", +5.67, "sdfsdfas") dove sdfsdfas è una stringa utilizzata per scartare l'aggiornamento duplicato. C'è un db che replica questo tipo di comandi?
Non sono sicuro di capire lo scenario in cui ciò sarebbe utile. Se è fondamentale che tutte le repliche debbano mantenere lo stesso valore in ogni momento, devono essere mantenute sincronizzate. In che modo "gli aggiornamenti idempotenti" potrebbero essere d'aiuto? –
cosa ne pensi di utilizzare qualsiasi db con la replica, e quindi equivalentemente "inserire in increase_operations (target_id, increase_amount, operation_id)" e quindi sum() la tua strada verso la vittoria? operation_id è il modo in cui si identificano le operazioni duplicate. Sicuramente alla fine coerente. – goat