sql >> Database >  >> NoSQL >> MongoDB

Moet ik Java String Pool gebruiken voor synchronisatie op basis van een unieke klant-ID?

Welnu, als uw strings uniek genoeg zijn (bijvoorbeeld gegenereerd via een cryptografische hash), zal synchronisatie op client-ID's waarschijnlijk werken , zolang je maar String.intern() . aanroept eerst op hen. Aangezien de ID's uniek zijn, is het niet waarschijnlijk dat u in conflict komt met andere modules, tenzij u uw ID's aan hen doorgeeft en ze volgen de slechte gewoonte om ze op te sluiten.

Dat gezegd hebbende, is het waarschijnlijk een slecht idee. Naast de kleine kans dat je op een dag onnodige ruzie krijgt als iemand anders dezelfde String gebruikt het grootste probleem is bijvoorbeeld dat je moet intern() al je String objecten, en dit lijdt vaak onder slechte prestaties vanwege de native implementatie van de string intern-tabel, de vaste grootte, enz. Als u echt alleen op basis van een String moet vergrendelen , kunt u beter Guava's Interners.newWeakInterner() interne implementatie, die waarschijnlijk veel beter zal presteren. Wikkel je string in een andere klasse om te voorkomen dat deze botst met de ingebouwde String op slot doen. Meer details over die aanpak in dit antwoord .

Daarnaast is er vaak een ander natuurlijk object om op te vergrendelen, zoals een slot in een sessie-object, enz.

Dit lijkt veel op deze vraag die meer uitgewerkte antwoorden heeft.

... of op zijn minst voldoende bits hebben om een ​​botsing onwaarschijnlijk genoeg te maken en als uw client-ID's geen deel uitmaken van uw aanvalsoppervlak .




  1. Best practices voor het uitvoeren van MongoDB in een cluster

  2. Eindeloze herstellende staat van secundair

  3. Hoe maak je zoiets als een virtueel veld en hardcode een waarde in mongodb-aggregatie $ project?

  4. Django - MongoDB:(kon geen verbinding maken met localhost:27017) Verbinding geweigerd