È meglio usare un database o una struttura dati per lo stack di rete?

2

Ho creato un'applicazione di messaggistica multi thread in C e attualmente sto utilizzando una tabella di memoria MySQL per salvare l'ID di sessione, ma non sono sicuro che sia stata una buona decisione o meno.

Funziona così, l'applicazione invia un messaggio e salva l'ID della sessione sorgente nella tabella MySQL. Quando l'applicazione ottiene la risposta positiva, rimuoverà l'ID della sessione dalla tabella MySQL, o se riceve una risposta di errore, quindi manterrà l'ID da riprovare più tardi.

L'ho creato in questo modo in modo che non mi debba preoccupare di costruire una struttura dati da solo, e il Database offre flessibilità quando si tratta di interrogarlo.

Pensi che sia appropriato o devo usare qualcos'altro? Si prega di notare che l'applicazione si aspetta di gestire un gran numero di transazioni al secondo.

    
posta poly 26.03.2012 - 02:44
fonte

4 risposte

3

Se riesci a inserire tutto nella memoria disponibile, perché non utilizzare una delle tante librerie / modelli di mappe Hash disponibili per C / C ++.

Otterrai un notevole incremento delle prestazioni (nessun disco, nessun IO, nessuna analisi .....) e la maggior parte delle API disponibili sono piuttosto semplici da usare.

Dai un'occhiata a questo confronto per vedere quale sarebbe più adatto alle tue esigenze.

    
risposta data 28.03.2012 - 03:49
fonte
0

Posso condividere ciò che abbiamo fatto per risolvere questo problema. Abbiamo creato un log write-ahead e utilizzato un albero nero / rosso in memoria per la ricerca su un set di chiavi molto grande.

I vantaggi di farlo da soli sono molti ... Incapsulamento, meno dipendenze, prestazioni, nessun sovraccarico di rete, ecc.

    
risposta data 26.03.2012 - 06:25
fonte
0

Puoi invece utilizzare il motore NDB per migliorare le prestazioni e la concorrenza. Sostituzione ad alte prestazioni del motore di archiviazione Memoria MySQL con NDB

    
risposta data 28.03.2012 - 03:24
fonte
0

Se l'applicazione prevede di gestire un numero elevato di transazioni e l'unico scopo del codice è elaborare l'ID sessione, ti suggerirei di utilizzare la tabella hash. MySQL è così pesante in questa situazione. Inoltre, gli utenti devono installare MySQL per prima cosa quando vogliono usare la tua applicazione, questo danneggerà la funzione user-friendly della tua applicazione.

    
risposta data 17.05.2012 - 06:53
fonte

Leggi altre domande sui tag