GUID, 即Globally Unique Identifier(全球唯一标识符) 也称作 UUID(Universally Unique IDentifier)。GUID是由网卡上的标识数字(每个网卡都有唯一的标识号)以及 CPU 时钟的唯一数字生成的的一个 16 字节(128位)的二进制值,用于指示产品的唯一性。世界上的任何两台计算机都不会生成重复的 GUID 值。
GUID 的格式为“xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx”,其中每个 x 是 0-9 或 a-f 范围内的一个十六进制的数字。例如:fda437b5-6edd-42dc-9bbd-c09d10460ad0 即为有效的 GUID 值。
GUID 主要用于在拥有多个节点、多台计算机的网络或系统中,分配必须具有唯一性的标识符。在 Windows 平台上,GUID 应用非常广泛:注册表、类及接口标识、数据库、甚至自动生成的机器名、目录名等。
SinoDB利用用户自定义例程(UDR)实现guid的步骤如下:
1、创建智能大对象dbspace:
touch /home/informix/dbs/sbdbs1
chmod 660 /home/informix/dbs/sbdbs1
onspaces -c -S sbdbs1 -p /home/informix/dbs/sbdbs1 -o 0 -s 1024000
---备注:1024000为所创建的智能大对象dbspace大小,可按实际情况指定
2、配置$INFORMIXDIR/etc/$ONCONFIG文件中的 以下参数,修改参数后要重启数据库:
VPCLASS jvp,num=1
SBSPACENAME sbdbs1
3、向技术支持工程师获取guid1.jar包拷贝到$INFORMIXDIR/extend目录下;
4、在需要生成guid的数据库中执行以下语句:
--数据库安装在linux环境,执行以下语句,红色字体部分以guid1.jar文件所在路径为准
execute procedure install_jar('file:$INFORMIXDIR/extend/guid1.jar','guid1',0);
--数据库安装在windows环境,执行以下语句,红色字体部分以guid1.jar文件所在路径为准
execute procedure install_jar("file:C:\Program Files\Sinoregal SinoDB Software Bundle\extend\guid1.jar", "guid1",0);
create function sys_guid() returns char(36)
external name 'guid1:UUIDGenerator.getGuid()'
language java;
5、生成guid测试:
create table tguid(aa char(50),bb int);
insert into tguid (aa,bb) values (sys_guid(),1);
select * from tguid;
以上,就是在SinoDB中生成GUID的具体步骤。需要注意的是,如果采用GUID作为主键,由于它是随机产生的,所以在进行数据插入时,会涉及到数据的移动,导致数据插入很缓慢,还会涉及大量不必要的磁盘活动。由此带来空间的浪费、存储的碎片化会最终会引起读写效率的严重下降,所以要慎重选择随机GUID作为主键。