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

Skal jeg bruge Java String Pool til synkronisering baseret på unikt kunde-id?

Hvis dine strenge er unikke nok (f.eks. genereret via en kryptografisk hash), vil synkronisering på klient-id'er sandsynligvis fungere , så længe du kalder String.intern() på dem først. Da ID'erne er unikke, vil du sandsynligvis ikke løbe ind i konflikter med andre moduler, medmindre du tilfældigvis sender dine ID'er til dem og de følger den dårlige praksis med at låse på dem.

Når det er sagt, er det nok en dårlig idé. Ud over den lille chance for en dag at løbe ind i unødvendig strid, hvis en anden låser på den samme String for eksempel er hovedproblemet, at du skal intern() hele din String objekter, og dette lider ofte af dårlig ydeevne på grund af den native implementering af strengintern-tabellen, dens faste størrelse osv. Hvis du virkelig har brug for at låse kun baseret på en String , er du bedre stillet ved at bruge Guavas Interners.newWeakInterner() intern implementering, som sandsynligvis vil fungere meget bedre. Pak din streng ind i en anden klasse for at undgå at støde på den indbyggede String låse. Flere detaljer om denne tilgang i dette svar .

Udover det er der ofte et andet naturligt objekt at låse på, såsom en lås i et sessionsobjekt osv.

Dette minder meget om dette spørgsmål som har mere konkrete svar.

... eller i det mindste have nok bits til at gøre kollision usandsynlig nok, og hvis dine klient-id'er ikke er en del af din angrebsflade .




  1. Mongoose find array med $in

  2. Mongoose:Få den fulde liste over brugere

  3. Datoforespørgsel fungerer med _id, men ikke med datoværdi - MongoDB

  4. MongoDB opdatering()