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

编程技术  /  houtizong 发布于 3年前   127
由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秒多,也是可以接受的,而且本人机子的性能为中等,服务器上应该快的多,完全够用。

请勿发布不友善或者负能量的内容。与人为善,比聪明更重要!

留言需要登陆哦

技术博客集 - 网站简介:
前后端技术:
后端基于Hyperf2.1框架开发,前端使用Bootstrap可视化布局系统生成

网站主要作用:
1.编程技术分享及讨论交流,内置聊天系统;
2.测试交流框架问题,比如:Hyperf、Laravel、TP、beego;
3.本站数据是基于大数据采集等爬虫技术为基础助力分享知识,如有侵权请发邮件到站长邮箱,站长会尽快处理;
4.站长邮箱:[email protected];

      订阅博客周刊 去订阅

文章归档

文章标签

友情链接

Auther ·HouTiZong
侯体宗的博客
© 2020 zongscan.com
版权所有ICP证 : 粤ICP备20027696号
PHP交流群 也可以扫右边的二维码
侯体宗的博客