在运用程序中,常常须要全局唯一的ID作为数据库主键。怎样生成全局唯一ID?
起首,须要肯定全局唯一ID是整型照样字符串?假如是字符串,那末现有的UUID就完整满足需求,不须要分外的事情。瑕玷是字符串作为ID占用空间大,索引效力比整型低。
假如采纳整型作为ID,那末起首排撤除32位int范例,因为局限太小,必需运用64位long型。
采纳整型作为ID时,怎样生成自增、全局唯一且不反复的ID?
计划一:运用数据库的自增ID,从1入手下手,基础能够做到一连递增。Oracle能够用SEQUENCE,MySQL能够用主键的AUTO_INCREMENT,虽然不能保证全局唯一,但每一个表唯一,也基础满足需求。
数据库自增ID的瑕玷是数据在插进去前,没法取得ID。数据在插进去后,猎取的ID虽然是唯一的,但一定要比及事件提交后,ID才算是有用的。有些双向援用的数据,不能不插进去后再做一次更新,比较贫苦。
第二种体式格局是采纳一个集中式ID生成器,它能够是Redis,也能够是ZooKeeper,也能够运用数据库的表纪录末了分派的ID。
这类体式格局最大的瑕玷是庞杂性太高,须要严峻依靠第三方效劳,而且代码设置烦琐。一般来讲,越是庞杂的计划,越不牢靠,而且测试越痛楚