关于GUID的话题
这几天,园中关于GUID的话题非常地火热。这其中大多人是觉得既然有了int自动增长类型,为什么还要有GUID。并且对GUID的使用效率进行了探讨,更有热心人还对GUID与int的使用效率进行了测试。
我们先抛开效率不谈,先想一想为什么要设计出这个对象,它究竟有什么用途?
GUID利用特殊的算法,可随机获取一个全域唯一标识,也可以说是全球唯一标识。它的重码率几乎为零,也就是因为如此,它才有具有了特殊的用途,也就是不可替代的作用。
我们大多数人在做项目时,是用不到这个类型的,所以在书上也鲜有介绍。我在一本书上看到,说是GUID是在多数据库使用时,才可以应用,如何应用,书上没有介绍。由于自己从没有做过多数据库的开发,所以也就没有什么感悟。
这两天百度了几篇文章,大多数讲的也是模模糊糊。然而,通过思考之后,突然明白了这其中的奥秘。
要想合理地使用GUID,需要有两个大前题:一个是多数据库;另一个是不使用全域唯一标识不行!
举例:
有一个跨国公司,总部在美国,同时它在世界各地设有分公司。总公司要求各分公司的实时数据,每隔4小时上传总公司一次。
问题是,各分公司的数据结构与总公司是一样的。各分公司是实时工作的,不可能得到总公司数据表的主键值。如果使用int自动增长类型,必然会发生冲突。这时使用GUID类型,就可以完美地解决上述的问题。
如果我们明白了GUID的不可替代性,那它的使用效率也就没有什么可讨论的了。
另外,我觉得这种应用多是在大型机上,效率应当是不成问题的。