MongoDB
 sql >> база данни >  >> NoSQL >> MongoDB

Трябва ли да използвам Java String Pool за синхронизация въз основа на уникален клиентски идентификатор?

Е, ако вашите низове са достатъчно уникални (напр. генерирани чрез криптографски хеш), синхронизирането на клиентски идентификатори вероятно ще работи , стига да извикате String.intern() първо върху тях. Тъй като идентификационните номера са уникални, няма вероятност да попаднете в конфликти с други модули, освен ако случайно не предадете своите идентификационни номера към тях и те следват лошата практика да ги блокират.

Въпреки това вероятно е лоша идея. В допълнение към малкия шанс един ден да попаднете в ненужно съперничество, ако някой друг заключи същия String например, основният проблем е, че трябва да intern() целият ви String обекти и това често страда от лоша производителност поради естественото внедряване на таблицата с низове, фиксираният й размер и т.н. Ако наистина трябва да заключите само на базата на String , по-добре е да използвате Interners.newWeakInterner() вътрешна реализация, която е вероятно да работи много по-добре. Обвийте своя низ в друг клас, за да избегнете сблъсък с вградения String ключалка. Повече подробности за този подход в този отговор .

Освен това често има друг естествен обект за заключване, като например заключване в обект на сесия и т.н.

Това е доста подобно на този въпрос който има по-подробни отговори.

... или поне да имате достатъчно битове, за да направите сблъсъка малко вероятен и ако вашите клиентски идентификатори не са част от вашия повърхност за атака .




  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. Сериализиране/десериализиране на MongoDB Bson документ с помощта на официалния C# драйвер

  2. Mongoose:как да актуализирате *всички* лица, отговарящи на условие?

  3. Как да актуализирам _id на един MongoDB документ?

  4. Как да получите класиране на артикул в списък, сортиран по множество полета в Mongoose

  5. MongoDB като база данни за времеви серии