Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 生成唯一ID_Java_Mysql_Database_Uniqueidentifier - Fatal编程技术网

Java 生成唯一ID

Java 生成唯一ID,java,mysql,database,uniqueidentifier,Java,Mysql,Database,Uniqueidentifier,我需要为我的应用程序生成唯一的ID。当我使用(UUID.randomuid()).toString()时,我得到了一个非常长的代码(认为这是唯一的) 我不确定当我们在Java时间戳或随机字符串的帮助下生成代码时,它会有多独特 我需要生成长度仅为8-10个字符的唯一代码(字母数字)。怎么会这样? 我正在使用MySQL数据库 在数据库端生成唯一的代码是最好的方法,还是我们可以在Java中生成这样短(但唯一)的代码 任何关于示例代码的建议都将非常有用。我使用commons lang中的RandomSt

我需要为我的应用程序生成唯一的ID。当我使用
(UUID.randomuid()).toString()
时,我得到了一个非常长的代码(认为这是唯一的)

我不确定当我们在Java时间戳或随机字符串的帮助下生成代码时,它会有多独特

我需要生成长度仅为8-10个字符的唯一代码(字母数字)。怎么会这样? 我正在使用MySQL数据库

在数据库端生成唯一的代码是最好的方法,还是我们可以在Java中生成这样短(但唯一)的代码


任何关于示例代码的建议都将非常有用。

我使用
commons lang
中的
RandomStringUtils.randomAlphanumeric()
方法来实现这一点:

import org.apache.commons.lang.RandomStringUtils;

public static final int ID_LENGTH = 10;

public String generateUniqueId() {
    return RandomStringUtils.randomAlphanumeric(ID_LENGTH);
}
如果使用Maven,请确保已将
commons lang
添加到项目的依赖项中:

<dependency>
    <groupId>commons-lang</groupId>
    <artifactId>commons-lang</artifactId>
    <version>2.6</version>
</dependency>

公地郎
公地郎
2.6
在数据库端生成唯一的代码是最好的方法,还是我们可以在java中生成这样短(但唯一)的代码

这取决于你和你的项目。id生成是业务逻辑的一部分吗?如果是,所有逻辑都是用Java编写的,那么就用Java编写。若将全部或部分逻辑委托给数据库,那个么在那个里生成id(但在这种情况下,您将对特定数据库有很强的依赖性)

在数据库端生成唯一的代码是最好的方法,还是我们可以在Java中生成这样短(但唯一)的代码


数据库设计为能够在需要时生成唯一的ID。我怀疑你(或我)能编写的任何代码都是“更好”的变体。

你有什么需要考虑的具体限制吗?例如跨应用程序的唯一性?因为否则,MySQL完全可以自己生成ID,所以您只需定义一个列,而不在插入时指定它(这意味着为它插入一个
NULL
值)——这将使MySQL使用下一个可用ID填充它,这个ID是唯一的,不需要您做任何工作


它不会是字母数字字符串(我不确定您是否将其指定为需求或限制),但如果您只需要唯一性,它就足够了。8-10个字母数字字符不足以保证随机生成的字符串的唯一性,因此您必须对数据库执行插入检查。

我编写了一个简单的服务,可以生成半唯一的非顺序64位长的数字。它可以部署在多台机器上,以实现冗余和可扩展性。它使用ZeroMQ进行消息传递。有关其工作原理的更多信息,请查看github页面:

查看:

您可以自定义它(仅适用于process或world),它易于使用且快速:

    private static final UIDGenerator SCA_GEN = new UIDGenerator(new ScalableSequence(0, 100));
.......
    SCA_GEN.next();
您可以更改实现以减小ID的大小(并添加其他折衷)

请参见我的基准测试结果:


或者自己运行。

如果id生成部分在数据库或java端完成,问题是: 您必须根据申请的要求回答此问题:

1) 一种方法是使用System.currenTimeMillis()。但是,如果您的应用程序将在多集群环境中工作,那么您可能会得到重复的值

2) 另一种方法是使用UUID生成器。它将帮助您处理需要合并的不同数据库的情况。使用这种方法,在合并数据库时不必担心id的重复

可能还有其他因素需要考虑。
根据您的问题,UUID方法将继续。

您想创建自己的方法来使用时间戳生成唯一id吗?您可以获得一个唯一的数字,然后在将记录存储到数据库中时每次递增1。@Sathish:为什么不获取子字符串()根据您所需的长度,不断检查新长度是否等于先前指定的长度。UUID是最好的方式:-)Regards@HemantMetalia:我不介意创建一个新方法来按时间戳生成代码,但我的问题是,它是否唯一?@Gagandeep-Bali:我觉得substring()和检查以前的值(将有许多id)需要很长时间。。将导致性能问题!!!非常感谢。如果是这样的话,你能给我举一些例子说明如何为MySQL数据库生成唯一的ID。试试看。我没有每天使用DBs,也从来没有使用过MySQL。。谢谢。。通过使用randomAlphanumeric(),我们可以得到所需长度的代码。。但是唯一性???
randomAlphanumeric()
生成带有随机字符的字符串,并且在大多数情况下它是唯一的(您也可以尝试在循环中运行它并生成新字符串,除非它不存在)。谢谢。。最后,我使用了RandomStringUtils.randomAlphanumeric(10)生成代码并检查数据库中是否存在代码。如果不存在,我将使用它作为我的唯一代码。如果我使用UID生成器,它在多集群java应用程序中是否唯一,即使服务器重新启动,该id是否唯一??