`
wolf_awp
  • 浏览: 54977 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

由UUID和短域名想到的(续一)

阅读更多
由UUID和短域名想到的,帖子http://www.iteye.com/topic/1017979
由UUID和短域名想到的,博客http://zhaiyz.iteye.com/blog/1018906

本文继续研究22位UUID的使用。
现在用来生成22位UUID的方法使用william_ai这位仁兄提供的。

现对产生22位UUID的效率与产生36位UUID的效率做对比。
以后还会继续对分别用它们做主键,建立索引的使用效率做对比。

代码如下:
import java.util.UUID;

public class UUIDUtil {
	public static final char[] charMap;
	static {
		charMap = new char[64];
		for (int i = 0; i < 10; i++) {
			charMap[i] = (char) ('0' + i);
		}
		for (int i = 10; i < 36; i++) {
			charMap[i] = (char) ('a' + i - 10);
		}
		for (int i = 36; i < 62; i++) {
			charMap[i] = (char) ('A' + i - 36);
		}
		charMap[62] = '_';
		charMap[63] = '-';
	}

	public static String hexTo64(String hex) {
		StringBuffer r = new StringBuffer();
		int index = 0;
		int[] buff = new int[3];
		int l = hex.length();
		for (int i = 0; i < l; i++) {
			index = i % 3;
			buff[index] = Integer.parseInt("" + hex.charAt(i), 16);
			if (index == 2) {
				r.append(charMap[buff[0] << 2 | buff[1] >>> 2]);
				r.append(charMap[(buff[1] & 3) << 4 | buff[2]]);
			}
		}
		return r.toString();
	}

	public static String getUUID() {
		StringBuffer sb = new StringBuffer("0");
		String uuid = UUID.randomUUID().toString();
		uuid = uuid.replaceAll("-", "").toUpperCase();
		sb.append(uuid);
		uuid = hexTo64(sb.toString());
		return uuid;
	}

	public static void main(String[] args) {

		int count = 100000;

		// 计算循环一千万次所用时间
		long start = System.nanoTime();
		for (int i = 0; i < count; i++) {
		}
		long end = System.nanoTime();
		long f = end - start;
		System.out.println("循环10W次所用时间:" + Float.valueOf(f) / 1000000 + "毫秒");

		@SuppressWarnings("unused")
		String uuid = null;
		// 计算使用getUUID()得到一千万个数据所用时间
		start = System.nanoTime();
		for (int i = 0; i < count; i++)
			uuid = getUUID();
		end = System.nanoTime();
		long l1 = end - start - f;
		System.out.println("计算使用getUUID()得到10W个数据所用时间:"
				+ (Float.valueOf(end - start - f) / 1000000) + "毫秒");

		// 计算使用randomUUID()得到一千万个数据所用时间
		start = System.nanoTime();
		for (int i = 0; i < count; i++)
			uuid = UUID.randomUUID().toString();
		end = System.nanoTime();
		long l2 = end - start - f;
		System.out.println("计算使用randomUUID()得到10W个数据所用时间:"
				+ (Float.valueOf(end - start - f) / 1000000) + "毫秒");

		System.out.println("用getUUID()取得一个数据所用的时间是用randomUUID()取得一个数据的"
				+ (Float.valueOf(l1) / Float.valueOf(l2)) + "倍");
	}
}

输出结果:
循环10W次所用时间:1.238204毫秒
计算使用getUUID()得到10W个数据所用时间:1324.7645毫秒
计算使用randomUUID()得到10W个数据所用时间:283.0976毫秒
用getUUID()取得一个数据所用的时间是用randomUUID()取得一个数据的4.679533倍


结论:
虽然产生22位UUID所用的时间是产生36位UUID的时间的4倍多,但产生10W个数据所用的时间为1秒多,也是可以接受的,而且本人机子的性能为中等,服务器上应该快的多,完全够用。
分享到:
评论

相关推荐

    uuid.rar_C获得UUID_UUID C_c生成uuid_c语言生成uuid_uuid

    UUID由128位数字组成,通常用16进制表示,长度为36个字符,分为五段,形式为8-4-4-4-12的32个字符。 标题“uuid.rar_C获得UUID_UUID C_c生成uuid_c语言生成uuid_uuid”表明这是一个关于使用C语言实现UUID生成的资源...

    短8位uuid 用于兑换码

    短8位uuid 用于兑换码,不重复,,本人用很好用,,分享给大家

    uuid.rar_uuid

    UUID和GUID实际上是一回事,它们遵循相同的规范,只是在不同的上下文中使用不同的名称。UUID标准定义了如何创建几乎在全球范围内唯一的标识符,这在分布式系统、数据库管理和网络通信中非常有用。 在给定的"uuid....

    浅谈java获取UUID与UUID的校验

    Java 获取 UUID 是一个非常常见的操作,UUID(Universally Unique Identifier,全球唯一标识符)是一种软件建筑中用于标识信息的标识符。UUID 的主要用途是为了在分布式系统中生成唯一的标识符,以便于标识一些信息...

    javascript生成uuid的js库文件

    UUID(Universally Unique Identifier)是用于唯一标识信息的一种标准格式,通常由32个十六进制数字组成,分为五组,用短横线分隔。在JavaScript中,生成UUID的需求时常出现,例如在生成临时ID、数据库记录的主键...

    16bit UUID一览表

    16位UUID是一种通用唯一标识符,用于标识蓝牙设备中的服务、特征和特征描述符。它是一个16位的二进制数字,通常用十六进制表示法表示。16位UUID是一种广泛使用的标识符,在蓝牙技术中扮演着重要角色。 蓝牙技术的...

    fast-uuid用于快速高效地解析和编写UUID的Java库

    `fast-uuid`是一个专门为Java设计的高性能UUID处理库,它的目标是优化UUID的生成和解析过程,减少CPU和内存的消耗,从而在高并发场景下提供更好的性能。这个库由James Chambers开发,版本号为`80353be`,表明它是...

    Math.uuid.js

    根据RFC 4122标准,UUID由五个部分组成,分别是时间戳、时钟序列、节点ID、版本号和变种号。UUID的全局唯一性保证了在大规模系统中,每个生成的ID都是独一无二的,避免了冲突。 Math.uuid.js库的出现,旨在提供一个...

    ThinkPad System UUID1.82

    总的来说,ThinkPad System UUID1.82是一款专为ThinkPad用户量身打造的便捷工具,它通过生成与ThinkPad设备匹配的UUID,解决了在U盘启动盘制作过程中可能出现的兼容性问题,提高了系统的稳定性和用户的工作效率。...

    PB生成UUID.zip

    UUID是一个128位的数字,通常表示为32个十六进制数字,用于唯一标识网络中的对象。它在分布式系统、数据库、软件开发等领域广泛使用,确保了在全球范围内不会重复。 PB,即Protocol Buffers,是Google推出的一种...

    uuid.zip_uuid

    此外,它还强调了64位高性能,这意味着它可能优化了内存使用和计算效率,能在短时间内生成大量UUID。毫秒级时间戳的提及表明它可能采用了版本1或版本2,利用当前时间作为部分UUID生成基础,以提高生成速度。自增序列...

    javaScript动态随即生成UUID

    `Math.uuidCompact`函数采用模板字符串和正则表达式进行替换的方式生成UUID,其内部使用`Math.random()`生成随机数,并根据位的位置和类型进行相应的处理,最终返回一个格式化的UUID字符串。 ### 总结 通过以上...

    Android蓝牙设备之间通过UUID通信

    在Android平台上,蓝牙通信是一种常见的无线数据传输方式,尤其适用于短距离、低功耗的应用场景。UUID(Universally Unique Identifier)在蓝牙通信中扮演着关键角色,它是一种全球唯一的标识符,用于区分不同的蓝牙...

    Javascript生成UUID 三种方法

    UUID(通用唯一标识符)就是一种常用的解决方案,它能够确保生成的ID在空间和时间上都是唯一的。JavaScript作为前端开发的主要语言之一,如何高效地生成UUID成为了一个值得探讨的话题。本文将详细介绍Math.uuid.js...

    java 生成32位UUID

    一个UUID由32个16进制数字组成,通常分为五段,用短横线分隔,形如`8-4-4-4-12`的36个字符。在32位UUID中,我们实际上是在讨论一种简化表示,不包含短横线,但依然确保全局唯一性。 生成32位的UUID在某些场景下很...

    UUID封装直接调用直接下载用

    例如,每个下载任务可以关联一个UUID,这样就可以在多任务下载环境中区分不同的下载请求,便于管理和控制。此外,如果结合服务器端的配合,UUID还可以用于验证下载权限,防止非法访问或者盗链。 在实际应用中,使用...

    返回Long型UUid

    然而,标准的UUID由32个16进制数字组成,形式上类似于“123e4567-e89b-12d3-a456-426655440000”,这在某些场景下可能过于冗长。在你提到的需求中,你希望生成一种简化版的UUID,即16位的纯数字Long型UUID。 为了...

    jdk与javauuidgenerator生成uuid

    UUID主要由三部分组成:时间戳、随机数和节点ID,这确保了其在全球范围内的唯一性。 首先,我们来看JDK自带的`java.util.UUID`类。这个类提供了多种生成UUID的方法,如`randomUUID()`,`nameUUIDFromBytes()`,`...

    uuid-1.6.2.tar.gz

    总结来说,uuid-1.6.2.tar.gz是一个包含PostgreSQL uuid-ossp扩展1.6.2版本的源代码压缩包,用于生成全局唯一的UUID,尤其适用于分布式系统和需要独特ID的情景。用户可以通过一系列安装步骤将此扩展集成到他们的...

    通过NDK获得UUID

    标题"通过NDK获得UUID"和描述涉及到利用Native Development Kit (NDK) 在Android系统底层获取UUID,以及通过Java层获取Android的唯一标识码。NDK允许开发者用C/C++编写部分应用,从而提高性能,特别是对于计算密集型...

Global site tag (gtag.js) - Google Analytics