Ищете хороший способ создания имен пользователей на многопоточной платформе
В настоящее время у меня есть набор правил для создания имен пользователей на основе инициалов пользователя. Это не регулируется. Таким образом, у пользователя есть "ххх" в качестве инициалов. Его имя пользователя будет zzxxx1. Следующим пользователем с такими же инициалами будет zzxxx2 и так далее. Я использую Java для генерации идентификаторов (useridCreation.jar). Этот jar вызывается многопоточным приложением (ITIM). Так как же мне зарезервировать zzxxx1 до тех пор, пока не будет создан первый пользователь, чтобы не иметь повторяющихся имен пользователей? Это ситуация типа фида, когда генерируются имена пользователей. Я могу тянуть до 4 пользователей / сек. Я думал о векторе, но я не слишком знаком с многопоточными приложениями, поэтому не знаю, как к этому подойти. Таблица SQL является еще одним вариантом, но я чувствую, что даже при одновременном списании, там будут некоторые проблемы. Как насчет файла, который я блокирую / разблокирую. Кто-нибудь реализовал надежное решение для этого типа вопроса?
Изменить: я забыл упомянуть, что это кластерная среда.
1 ответ
Этот jar вызывается многопоточным приложением (ITIM). Так как же мне зарезервировать zzxxx1 до тех пор, пока не будет создан первый пользователь, чтобы не иметь повторяющихся имен пользователей?
Если это кластерная конфигурация (то есть распределенные приложения, работающие на нескольких серверах), то вам понадобится какой-то центральный сервис, который гарантирует уникальность имен. Одним из простых решений была бы база данных с уникальными ограничениями на поле имени пользователя в некоторой таблице. Каждый сервер может сделать что-то вроде заказанного LIKE
запросить, чтобы найти наибольшее число имени пользователя, а затем попытаться создать запись, используя следующий номер. Если он был взят, он попытался бы снова со следующим номером...
Другим решением будет иметь центральный сервис, который гарантирует уникальность. Все узлы кластера будут связываться с центральным, который будет использовать synchronized
или другая блокировка, чтобы гарантировать, что только один поток генерирует уникальное имя одновременно. С другой стороны, я полагаю, вам нужно постоянство, поэтому, возможно, база данных - самый простой вариант.