Come gestire piccole transazioni frequenti

-3

Mi è stato affidato l'incarico di creare un sistema in cui gli utenti possano acquistare proprietà intellettuale (ampiamente categorizzate, difficili da spiegare cosa stanno realmente acquistando) dal sistema e possono trasferire fondi tra loro.

Allo scopo ho creato una tabella delle transazioni che contiene il mittente, il destinatario e l'importo. Per motivi di prestazioni, memorizzo il saldo corrente dell'utente in una colonna nella tabella utenti e lo aggiorno con i trigger nella tabella delle transazioni.

Tuttavia esiste un tipo di prodotto che non è realmente venduto ma piuttosto "affittato", il che significa che si paga come si va, e non è un prezzo fisso a seconda dell'utilizzo è possibile ottenere addebitato x dollari ogni y secondi dove xey sono molto variabili. In generale, comunque, entrambi i valori saranno abbastanza bassi - x sarà centesimi y sarà ~ 10 o meno.

Spero che tu possa vedere come questo diventa un problema per il mio attuale set up, non posso usare la tabella delle transazioni per l'ovvio motivo che verrà spammato con piccole transazioni (che sarebbe il modo corretto di usare il sistema suppongo ). La soluzione che viene in mente è quella di accumulare il prezzo da qualche altra parte e quindi addebitare una volta che l'utente interrompe l'utilizzo del servizio, tuttavia sorge un altro problema con quella soluzione: cosa succede se l'utente avvia il servizio e poi acquista qualcos'altro dal sistema ed è lasciato con una quantità inferiore a quella che si accumula.

Nota: sto parlando di valuta virtuale nel sistema che gli utenti pagano con denaro reale.

Quale sarebbe un modo corretto di affrontare questo?

    
posta php_nub_qq 23.08.2017 - 17:05
fonte

2 risposte

1

Personalmente non avrei una colonna nella tabella degli utenti per rappresentare il saldo. Invece, ovunque si presenti il "saldo", che proviene da una query di somma sulla tabella delle transazioni su quell'utenteide. Tuttavia, gli utenti ricevono denaro sul loro conto, che entra anche nella tabella delle transazioni. L'aggiunta di fondi a un conto è una transazione positiva e il consumo di fondi per pagare un prodotto o servizio è una transazione negativa.

Quindi in qualsiasi momento è possibile calcolare il saldo per l'utente. Hai anche il vantaggio di essere in grado di tenere conto del saldo degli utenti e della possibilità di riconciliare. Sarebbe difficile rendere conto dell'equilibrio nel modo in cui lo stai facendo ora.

Anche questo ti permette di eliminare il grilletto.

Se indicizzate le vostre tabelle, la strutturazione degli utenti e delle transazioni e l'interrogazione come descritto qui avranno buone prestazioni e scalabilità.

    
risposta data 23.08.2017 - 17:35
fonte
-3

Puoi usare le sessioni. Se ciò accade in più sessioni, memorizza le transazioni alla fine della sessione. Conserva i dettagli nel DB solo se sono importanti.

    
risposta data 23.08.2017 - 17:32
fonte

Leggi altre domande sui tag