java Uuid学习

 
package com.apusic.string;

import java.util.UUID;

public class UuidGenetor {
	
	public static String getUuid(){
		String uuid = UUID.randomUUID().toString();
		return uuid;
	}
	
	/**
	 * 返回uuid数组
	 * length 为数组的长度
	 */
	public static String[] getUuidArray(int length){
		if(length<1){
			return null;
		}
		String[] uuidArray = new String[length];
		for(int i=0; i<length; i++){
			uuidArray[i] = getUuid();
			String str = uuidArray[i].replace("-", "");
			System.out.println(str);
		}
		return uuidArray;
	}
	
	
	public static void main(String[] args) {
		getUuidArray(5);
	}

}


理论说明:
   UUID(Universally Unique Identifier)全局唯一标识符,是指在一台机器上生成的数字,它保证对在同一时空中的所有机器都是唯一的, 基于128 位唯一值产生算法生成16 进制数值(编码后以长度32 的字符串表示)。按照开放软件基金会(OSF)制定的标准计算,用到了以太网卡地址、纳秒级时间、芯片ID码和许多可能的数字。由以下几部分的组合:当前日期和时间(UUID的第一个部分与时间有关,如果你在生成一个UUID之后,过几秒又生成一个UUID,则第一个部分不同,其余相同),时钟序列,全局唯一的IEEE机器识别号(如果有网卡,从网卡获得,没有网卡以其他方式获得),UUID的唯一缺陷在于生成的结果串会比较长。


  关于使用UUID作为数据库主键的优劣分析:
  优点:
  1、 便于指定比较个性化的主键,如我想每个主键都是以"yao"开头的,那么我就可以采取“yao"+uuid的形式
  2、 能够保证独立性,程序可以在不同的数据库间迁移,效果不受影响。
保证生成的ID不仅是表独立的,而且是库独立的,这点在你想切分数据库的时候尤为重要。

  缺点:
  1、 比较占地方,和INT类型相比,存储一个UUID要花费更多的空间
  2、 使用UUID后,URL显得冗长,不够友好(但此处有时也能成为优势)
  3、 性能问题:数据在索引的时候效率会随着体积的增加而降低,但也有许多数据库有针对uuid的主键生成策略, 据说效率与原生主键一样, ^_^ ^_^ 没试过。

你可能感兴趣的:(java,算法)