MongoDB
 sql >> Database >  >> NoSQL >> MongoDB

Devo utilizzare Java String Pool per la sincronizzazione in base all'ID cliente univoco?

Bene, se le tue stringhe sono sufficientemente uniche (ad esempio, generate tramite un hash crittografico), la sincronizzazione sugli ID client probabilmente funziona , purché chiami String.intern() prima su di loro. Dal momento che gli ID sono univoci, è probabile che tu non entri in conflitto con altri moduli, a meno che tu non trasmetta loro i tuoi ID e seguono la cattiva pratica di bloccarli.

Detto questo, probabilmente è una cattiva idea. Oltre alla piccola possibilità che un giorno si imbatta in una contesa non necessaria se qualcun altro blocca la stessa String ad esempio, il problema principale è che devi intern() tutta la tua String oggetti, e questo spesso soffre di scarse prestazioni a causa dell'implementazione nativa della tabella string intern, è di dimensioni fisse, ecc. Se hai davvero bisogno di bloccare in base solo a una String , è meglio utilizzare Interners.newWeakInterner() implementazione interna, che probabilmente funzionerà molto meglio. Avvolgi la tua stringa in un'altra classe per evitare conflitti sulla String incorporata serratura. Maggiori dettagli su tale approccio in questa risposta .

Oltre a ciò, c'è spesso un altro oggetto naturale su cui bloccare, come un blocco in un oggetto di sessione, ecc.

Questo è abbastanza simile a questa domanda che ha risposte più dettagliate.

... o, come minimo, avere abbastanza bit per rendere la collisione abbastanza improbabile e se i tuoi ID cliente non fanno parte del tuo superficie di attacco .