sql >> Databáze >  >> NoSQL >> MongoDB

Mám používat Java String Pool pro synchronizaci na základě jedinečného ID zákazníka?

Pokud jsou vaše řetězce dostatečně jedinečné (např. generované pomocí kryptografického hashe), synchronizace na klientských ID pravděpodobně funguje , pokud zavoláte String.intern() nejprve na nich. Vzhledem k tomu, že ID jsou jedinečná, není pravděpodobné, že se dostanete do konfliktu s jinými moduly, pokud jim svá ID náhodou nepředáte a dodržují špatnou praxi zamykání.

To znamená, že je to pravděpodobně špatný nápad. Kromě malé šance, že se jednoho dne dostanete do zbytečného sporu, pokud někdo jiný zamkne stejný String instanci, hlavním problémem je, že musíte intern() všechny vaše String objektů, a to často trpí špatným výkonem kvůli nativní implementaci intern tabulky řetězců, její pevné velikosti atd. Pokud opravdu potřebujete uzamknout pouze na základě String , je lepší používat Guava's Interners.newWeakInterner() interní implementace, která bude pravděpodobně fungovat mnohem lépe. Zabalte svůj řetězec do jiné třídy, abyste předešli střetu s vestavěným String zámek. Další podrobnosti o tomto přístupu v této odpovědi .

Kromě toho často existuje další přirozený objekt, na který lze uzamknout, jako je zámek v objektu relace atd.

To je docela podobné této otázce který má podrobnější odpovědi.

... nebo alespoň mít dostatek bitů, aby kolize byla dostatečně nepravděpodobná, a pokud vaše ID klientů nejsou součástí vašeho útočný povrch .




  1. Jak získat konkrétní vložený dokument do kolekce MongoDB?

  2. Jak vysvětlujete odlišný dotaz v MongoDB?

  3. EPEL MongoDB se nespustí na EC2 Amazon AMI

  4. Problém MongoDB a upsert