`

【2015工作总结】- 编码生成规则

 
阅读更多

首先,给大家普及知识:

 

UUID是一个由4个连字号(-)将32个字节长的字符串分隔后生成的字符串,总共36个字节长。比如:550e8400-e29b-41d4-a716-446655440000

http://www.baike.com/wiki/UUID

 

GUID 是微软对UUID这个标准的实现。UUID是由开放软件基金会(OSF)定义的。UUID还有其它各种实现,不止GUID一种。比如我们这里在Java中、Oracle中用到的。

http://www.baike.com/wiki/GUID

 

COMB(combine)型是数据库特有的一种设计思想,可以理解为一种改进的GUID,它通过组合GUID和系统时间,以使其在索引和检索事有更优的性能。
数据库中没有COMB类型,它是Jimmy Nilsson在他的“The Cost of GUIDs as Primary Keys”一文中设计出来的。COMB数据类型的基本设计思路是这样的:既然UniqueIdentifier数据因毫无规律可言造成索引效率低下,影响了系统的性能,那么我们能不能通过组合的方式,保留UniqueIdentifier的前10个字节,用后6个字节表示GUID生成的时间(DateTime),这样我们将时间信息与UniqueIdentifier组合起来,在保留UniqueIdentifier的唯一性的同时增加了有序性,以此来提高索引效率。

http://blog.csdn.net/happyflystone/article/details/1903854

 

下边总结下,我们生产编码的CUID代码:

 

	/**
	 * 生成指定类型的25位编码
	 * @param cuidType 编码类型
	 * @return String
	 * @throws Exception
	 */
	private synchronized static String generateCuid(String cuidType) throws Exception {
		int max_hash_len = 16;
		StringBuffer cuidBuffer = new StringBuffer();
		Random random = new Random();
		// 第1位 类型,比如A、B、C
		cuidBuffer.append(cuidType);
		// 第2位 到 第 5位 随机大写字母
		for (int i = 0; i < 4; ++i)
			cuidBuffer.append("ABCDEFGHIJKLMNOPQRSTUVWXYZ".charAt(random.nextInt("ABCDEFGHIJKLMNOPQRSTUVWXYZ".length())));
		long hashCode = UUID.randomUUID().hashCode();
		// 第6位 到 第 14/15位 使用UUID的hashcode得到0-9的9位或10位数
		cuidBuffer.append(hashCode < 0 ? -hashCode : hashCode);
		// 第10/11位 正数补0 负数补1
		cuidBuffer.append(hashCode > 0 ? "0" : "1");
		// 用0补足16位
		if (cuidBuffer.length() < max_hash_len)
			for (int i = 0; i < max_hash_len - cuidBuffer.length(); i++)
				cuidBuffer.append("0");
		// 用当前时分秒 补足最后9位 一共25位(1位类型字母+4位大写字母+20位随机数字)
		cuidBuffer.append(new SimpleDateFormat("HHmmssSSS").format(new Date()));
		return cuidBuffer.toString();
	}

 

 

 

调用方法:

 

		try {
			String aCode = generateCuid("A");
			System.out.println(aCode);
			System.out.println(aCode.length());
		} catch (Exception e) {
			Log.error("生成A类型编码失败", e);
		}

 

分享到:
评论

相关推荐

    经典SQL脚本大全

    │ │ 8.1.4 生成编码规则调整处理T-SQL语句的函数.sql │ │ 8.1.5 删除节点处理的通用存储过程.sql │ │ 8.1.5 移动节点处理的通用存储过程.sql │ │ 8.2.2 树形数据层次显示处理示例.sql │ │ 8.2.2 树形数据...

    asp.net知识库

    Oracle编程的编码规范及命名规则 Oracle数据库字典介绍 0RACLE的字段类型 事务 CMT DEMO(容器管理事务演示) 事务隔离性的一些基础知识 在组件之间实现事务和异步提交事务(NET2.0) 其它 在.NET访问MySql数据库时的...

    基于Java的猜拳小游戏设计.doc

    目 录 绪论 - 1- 一、背景与意义 - 2- 二、设计原理与方案 - 2- 一)方案 - 2- 二)设计思路 - 3- 三)系统分析 - 3- 四)程序概要设计 - 4- 五)工作流程图 - 4- 六)程序框图 - 5- 七)程序中所用类说明 - 5- 八)...

    JEECG快速开发平台-其他

    简易的图像报表工具和Excel导入导出8、Web容器测试通过的有Jetty和Tomcat,Weblogic9、亮点功能:分布式部署,云平台,移动平台开发,规则引擎10、要求JDK1.6+JEECG技术点总结:技术点一:代码生成器SPA单页面应用...

    Sqlserver2000经典脚本

    │ 8.1.4 生成编码规则调整处理T-SQL语句的函数.sql │ │ 8.1.5 删除节点处理的通用存储过程.sql │ │ 8.1.5 移动节点处理的通用存储过程.sql │ │ 8.2.2 树形数据层次显示处理示例.sql │ │ ...

    ChatGPT是否会抢走程序员的工作

    毫无疑问,ChatGPT 快要成为技术游戏规则改变者,因为它可以进行类似人类的对话、撰写文章、总结报告、创建图像,而且还可以写代码。 那么,它真的会取代人类,抢走你的工作吗?在本文中,我们将揭示是否需要担心 ...

    sqlserver2000基础(高手也有用)

    4.1 字符存储编码与排序规则 107 4.1.1 字符数据的存储编码 107 4.1.2 UNICODE 108 4.1.3 排序规则 109 4.1.4 排序规则比较和排列规则 111 4.1.5 使用排序规则 112 4.1.6 如何选择字符字段类型 116 ...

    SQL SERVER 2000开发与管理应用实例

    4.1 字符存储编码与排序规则 107 4.1.1 字符数据的存储编码 107 4.1.2 UNICODE 108 4.1.3 排序规则 109 4.1.4 排序规则比较和排列规则 111 4.1.5 使用排序规则 112 4.1.6 如何选择字符字段类型 ...

    springmybatis

    mybatis实战教程mybatis in action之九mybatis 代码生成工具的使用 mybatis SqlSessionDaoSupport的使用附代码下载 转自:http://www.yihaomen.com/article/java/302.htm (读者注:其实这个应该叫做很基础的入门...

    JEECG快速开发平台 v4.0

    引领新的开发模式(Online Coding-&gt;代码生成器-&gt;手工MERGE智能开发),可以帮助解决Java项目90%的重复工作,让开发更多关注业务逻辑。既能快速提高开发效率,帮助公司节省人力成本,同时又不失灵活性。 JEECG宗旨是:...

    Oracle SQL高级编程(资深Oracle专家力作,OakTable团队推荐)--随书源代码

    作者通过总结各自多年的软件开发和教学培训经验,与大家分享了掌握Oracle SQL所独有的丰富功能的技巧所在,内容涵盖SQL执行、联结、集合、分析函数、子句、事务处理等多个方面。读者可以学习到以下几个方面的技巧:...

    java 面试题 总结

    JAVA相关基础知识 1、面向对象的特征有哪些方面 1.抽象: 抽象就是忽略一个主题中与当前目标无关的那些方面,以便更充分地注意与当前目标有关的方面。抽象并不打算了解全部问题,而只是选择其中的一部分,暂时不用...

    《算法》中文版,Robert Sedgewick,塞奇威克

    编辑推荐  Sedgewick之巨著,与高德纳TAOCP一脉相承  几十年多次修订,经久不衰的畅销书  涵盖所有程序员必须掌握的50种算法 内容简介 ...5.5.5 游程编码 5.5.6 霍夫曼压缩 第6章 背景 索引

    Visual C++ 2005入门经典--源代码及课后练习答案

    2.6.1 对操作数进行类型强制转换的规则 68 2.6.2 赋值语句中的类型强制转换 69 2.6.3 显式类型强制转换 69 2.6.4 老式的类型强制转换 70 2.6.5 按位运算符 71 2.7 了解存储时间和作用域 76 2.7.1 自动...

    JAVA项目开发全程实录(含电子书和所有源代码)

    1.3.3 业务逻辑编码规则 7 1.3.4 系统流程图 8 1.3.5 构建开发环境 8 1.3.6 系统预览 9 1.3.7 文件夹组织结构 10 1.4 数据库设计 10 1.4.1 数据库分析 10 1.4.2 进销存管理系统的E-R图 11 1.4.3 使用PowerDesigner...

    Spring面试题

    他很大程度的简化DAO层的编码工作 3. hibernate使用Java反射机制,而不是字节码增强程序来实现透明性。 4. hibernate的性能非常好,因为它是个轻量级框架。映射的灵活性很出色。它支持各种关系数据库,从一对一到...

    算法,4th,塞奇威克 (Robert Sedgewick)韦恩 (Kevin Wayne), 谢路云 译.azw3

    算法,4th,塞奇威克,中文版 《图灵程序设计丛书:算法(第4版)》编辑推荐:Sedgewick之巨著,与高德纳TAOCP一脉相承,几十年多次修订,经久不衰的畅销书,涵盖所有...5.5.5 游程编码 5.5.6 霍夫曼压缩 第6章 背景 索引

Global site tag (gtag.js) - Google Analytics