我目前有一套规则来根据用户的姓名首字母创建用户名。这是不可调整的。因此用户将'xxx'作为首字母缩写。他的用户名是zzxxx1。具有相同首字母的下一个用户将是zzxxx2,依此类推。我正在使用Java来生成id(useridCreation.jar)。这个jar由多线程应用程序(ITIM)调用。那么我将如何在第一个用户完成创建之前保留zzxxx1,以便不会有重复的用户名。这是生成用户名的订阅源类型情况。我最多可以达到4个用户/秒。我在想Vector,但我不太熟悉多线程应用程序,所以我不确定如何处理它。 SQL表是另一种选择,但我觉得即使同时注销,也会出现一些问题。我锁定/解锁的文件怎么样?是否有人为此类问题实施了可靠的解决方案?
编辑:我忘了提到这是一个集群环境。
答案 0 :(得分:2)
这个jar由多线程应用程序(ITIM)调用。那么我将如何在第一个用户创建完成之前保留zzxxx1,以便不会有重复的用户名。
如果这是一个集群配置(即在多个服务器上运行的分布式应用程序),那么您将不得不拥有某种中心服务来保证名称的唯一性。一个简单的解决方案是在某些表中对用户名字段具有唯一约束的数据库。每个服务器都可以执行类似于有序LIKE
查询的操作来查找最高用户名编号,然后尝试使用下一个编号创建条目。如果它被采用它会再次使用下一个数字...
另一种解决方案是拥有一个能够保证唯一性的中央服务。所有群集节点都将联系使用synchronized
或其他锁的中心节点,以确保一次只有一个线程生成唯一名称。然后我再次假设您需要持久性,因此数据库可能是最简单的选择。