ITPUB论坛-中国最专业的IT技术社区

 找回密码
 注册
查看: 4431|回复: 25

[讨论] 【大话IT】ORACLE的PK之间的PK(sequence vs guid)

[复制链接]
认证徽章
论坛徽章:
166
SQL数据库编程大师
日期:2016-01-13 10:30:43SQL极客
日期:2013-12-09 14:13:35SQL大赛参与纪念
日期:2013-12-06 14:03:45最佳人气徽章
日期:2015-03-19 09:44:03现任管理团队成员
日期:2015-08-26 02:10:00秀才
日期:2015-07-28 09:12:12举人
日期:2015-07-13 15:30:15进士
日期:2015-07-28 09:12:58探花
日期:2015-07-28 09:12:58榜眼
日期:2015-08-18 09:48:03
发表于 2017-4-14 14:27 | 显示全部楼层 |阅读模式
话题背景:
          Oracle8i引入了SYS_GUID这个概念,系统根据当前时间和机器码,生成全球唯一的一个序列号。它同经常使用的传统的序列(sequence)相比具有诸多优势。

          声称一个序列生成器只是简单地创建从给定的起点开始的一系列整数值,而且它被用在选择陈述式的时候自动地递增该系列。

      序列生成器所生成的数字只能保证在单个实例里是唯一的,这就不适合将它用作并行或者远程环境里的主关键字,因为各自环境里的序列可能会生成相同的数字,从而导致冲突的发生。SYS_GUID会保证它创建的标识符在每个数据库里都是唯一的。

     此外,序列必须是DML陈述式的一部分,因此它需要一个到数据库的往返过程(否则它就不能保证其值是唯一的)。SYS_GUID源自不需要对数据库进行访问的时间戳和机器标识符,这就节省了查询的消耗。
      
       现例: 笔者在设计公司员工表时先启用了sys_guid,后来由于要与传统的系统对接(目前只认number型字段),又经过大的变动更改为了序列。在他人看来,1.sys_guid的32位长度过长,浪费存储。2.sys_guid不好记,在进行一些运维时,不及number型主键好记,number主键甚至可以有靓号的作用。
               
      当然还有些情况的主键是通过自定义函数的方式,生成的带有一定业务意义又能作唯一标识的字符串。
   
话题讨论:
              1.目前大家在工作中运用的是何种方式生成的主键,原因是什么?
              2.针对上面提到的几种方式,各有什么好处或者劣势。
              3.特殊情况下的主键生成(自定义方式),这是一种怎样特殊的场景,都是怎么实现的。
         
注:讨论不限于此,可引申发散。


活动时间:2017年4月14日--5月14日

活动奖励:
动结束后,我们将会选取5个精彩回复,送创意镜头水杯一个。





DTCC 2017 来啦!

随着云计算和大数据时代的来临,数据正在以前所未有的速度成为各个领域价值创造的核心驱动力。

在此背景下,国内最受关注的数据库技术盛会——2017第八届中国数据库技术大会(DTCC2017)将于2017年5月11-13日如约而至。本届大会以“数据驱动•价值发现”为主题,汇集来自互联网、电子商务、金融、电信、政府、行业协会等20多个领域的120多位技术专家,共同探讨Oracle、MySQL、NoSQL、云端数据库、智能数据平台、区块链、数据可视化、深度学习等领域的前瞻性热点话题与技术。大会共设定2大主场和20个技术专场,将吸引5000多名IT人士参会,为数据库人群、大数据从业人员、广大互联网人士及行业相关人士提供最具价值的交流平台。





官网链接:http://dtcc.it168.com/
购票链接:http://dtcc.it168.com/goupiao.html

欢迎扫码关注DTCC官方微信,获取最新信息!

求职 : SAP实施
认证徽章
论坛徽章:
256
巴塞罗那
日期:2016-01-29 16:40:32巴塞罗那
日期:2016-01-29 16:40:32巴塞罗那
日期:2016-01-29 16:40:32巴塞罗那
日期:2016-01-29 16:40:32巴塞罗那
日期:2016-01-29 16:40:32芝加哥公牛
日期:2017-02-07 09:03:42芝加哥公牛
日期:2017-02-07 09:03:43芝加哥公牛
日期:2017-02-07 09:03:43芝加哥公牛
日期:2017-02-07 09:03:43芝加哥公牛
日期:2017-02-07 09:03:43
发表于 2017-4-14 15:16 | 显示全部楼层
就等我的话题了

使用道具 举报

回复
论坛徽章:
215
秀才
日期:2016-03-01 09:57:08白羊座
日期:2015-11-01 17:52:47射手座
日期:2015-09-21 12:29:56双子座
日期:2015-09-12 11:55:41天蝎座
日期:2015-09-11 10:48:10双鱼座
日期:2015-09-02 10:48:47射手座
日期:2015-10-06 12:37:30白羊座
日期:2015-08-30 21:21:20水瓶座
日期:2015-08-26 17:36:07双子座
日期:2015-08-13 14:10:00
发表于 2017-4-14 15:26 | 显示全部楼层
大部分用SEQUENCE, 少数用SYS_GUID

另外,你的“创意镜头水杯”长得很像飞机杯  

使用道具 举报

回复
论坛徽章:
3
ITPUB 11周年纪念徽章
日期:2012-10-09 18:08:152014年新春福章
日期:2014-02-18 16:42:02马上有房
日期:2014-02-18 16:42:02
发表于 2017-4-14 16:04 | 显示全部楼层
1.目前大家在工作中运用的是何种方式生成的主键,原因是什么?
    基本上使用sequence和自定义主键方式居多,原因是
   1)有的应用需要生成有逻辑意义的序号,guid没有用武之地
   2)应用没有使用分布式计算环境,没有全局唯一性的需求。

2.针对上面提到的几种方式,各有什么好处或者劣势。
sequence:
    优点--使用最简单,建个序列get就好
    缺点--数据库实现不同(informix和Oracle就存在差异,MySQL根本就不支持)影响数据迁移,不支持分布式计算环境(多个数据库会冲突)
guid:
    优点--完美支持分布式计算环境,全局唯一
    缺点--实现方式选择太多(应用层代码生成、数据库原生功能生成)需要根据应用场景选择合适的,生成时的开销比较大
自定义主键:
    优点--可以根据需求实现任意格式的主键
    缺点--需要编写代码或者调用第三方库函数或调用数据库函数生成,生成时效率不如sequence

3.特殊情况下的主键生成(自定义方式),这是一种怎样特殊的场景,都是怎么实现的。
比如项目管理系统中需要通过项目编号识别项目性质,形如YYYY-TT-SSSS的主键,YYYY是项目年份,TT是项目类型,SSSS是项目序号每年从1开始顺序增加。通过应用代码实现,SSSS取自数据库sequence,年份和项目类型来自输入参数。

使用道具 举报

回复
求职 : 信息技术经理/主管
认证徽章
论坛徽章:
562
洛杉矶快船
日期:2014-06-16 11:45:27NBA季后赛纪念徽章
日期:2012-06-25 12:19:11NBA常规赛纪念章
日期:2013-04-22 11:49:35NBA季后赛纪念徽章
日期:2011-06-13 11:34:51NBA常规赛纪念章
日期:2011-04-15 13:34:11NBA季后赛纪念徽章
日期:2013-06-21 14:52:05NBA常规赛纪念章
日期:2012-04-27 16:07:05嫦娥
日期:2014-11-04 16:10:29秀才
日期:2015-10-08 17:57:58切尔西
日期:2015-01-05 11:45:58
发表于 2017-4-14 16:59 | 显示全部楼层
  1.目前大家在工作中运用的是何种方式生成的主键,原因是什么?
只用sequence,没有那么长,有逻辑意义
              2.针对上面提到的几种方式,各有什么好处或者劣势。
sequence:简单
guid:全球唯一用不到
              3.特殊情况下的主键生成(自定义方式),这是一种怎样特殊的场景,都是怎么实现的。
如wms条码唯一等。

使用道具 举报

回复
认证徽章
论坛徽章:
144
ITPUB十周年纪念徽章
日期:2011-11-01 16:24:04ITPUB 11周年纪念徽章
日期:2012-09-28 17:34:42ITPUB社区12周年站庆徽章
日期:2013-08-13 16:52:38itpub13周年纪念徽章
日期:2014-10-08 15:21:35ITPUB14周年纪念章
日期:2015-10-26 17:23:44蒙奇·D·路飞
日期:2017-03-29 10:45:082017金鸡报晓
日期:2017-01-10 15:33:11状元
日期:2015-11-19 12:58:23榜眼
日期:2015-11-19 12:58:23探花
日期:2015-11-19 12:58:23
发表于 2017-4-15 20:41 | 显示全部楼层
必须SEQUENCE啊
当然也有用当前日(yyyymmdd)+seq的,e.g. 201704150001,201704150002...

使用道具 举报

回复
认证徽章
论坛徽章:
87
举人
日期:2015-11-09 11:35:06秀才
日期:2016-12-21 16:55:07ITPUB15周年纪念
日期:2016-10-06 10:54:102017金鸡报晓
日期:2017-01-10 15:39:052016猴年福章
日期:2016-02-23 09:58:342016猴年福章
日期:2016-02-18 09:31:30秀才
日期:2016-02-18 09:19:48秀才
日期:2016-02-18 09:11:33处女座
日期:2016-01-27 13:38:05状元
日期:2016-01-26 10:42:18
发表于 2017-4-15 22:14 | 显示全部楼层
支持 罗大耳朵版主

使用道具 举报

回复
论坛徽章:
1
ITPUB14周年纪念章
日期:2015-10-26 17:24:11
发表于 2017-4-15 23:17 | 显示全部楼层
1.目前大家在工作中运用的是何种方式生成的主键,原因是什么?目前数据库的主键很多使用的是有实际意义的字段
对于无法确认字段唯一性的很多数据表,选择性的使用了年月日+短序列的构成。
很少会很使用到guid, 效率不够,非分布式系统用不到。


2.针对上面提到的几种方式,各有什么好处或者劣势。
a,使用有意义的字段效果是符合业务实际需求
B,短序列+日期, 可能出现某一天不顺序的问题,一般处理为定期日终系统维护是变更

3.特殊情况下的主键生成(自定义方式),这是一种怎样特殊的场景,都是怎么实现的。
日期+序列

使用道具 举报

回复
论坛徽章:
61
林肯
日期:2013-09-12 15:57:33路虎
日期:2014-01-26 14:35:49马自达
日期:2013-10-11 13:52:31三菱
日期:2013-11-25 11:21:19现代
日期:2013-08-29 14:39:50雪佛兰
日期:2013-09-12 15:55:00一汽
日期:2013-11-28 14:15:05技术图书徽章
日期:2014-03-10 14:09:19技术图书徽章
日期:2013-12-11 10:11:35技术图书徽章
日期:2013-12-11 10:10:51
发表于 2017-4-17 07:57 | 显示全部楼层
Oracle8i引入了SYS_GUID这个概念,系统根据当前时间和机器码,生成全球唯一的一个序列号。它同经常使用的传统的序列(sequence)相比具有诸多优势。

使用道具 举报

回复
论坛徽章:
4
秀才
日期:2017-03-20 13:42:20秀才
日期:2017-03-28 15:11:09秀才
日期:2017-03-28 15:59:38秀才
日期:2017-04-06 18:09:28
发表于 2017-4-17 14:38 | 显示全部楼层
1.目前大家在工作中运用的是何种方式生成的主键,原因是什么?
我目前用SEQUENCE,因为我尽量用默认的东西

2.针对上面提到的几种方式,各有什么好处或者劣势。
SEQUENCE:
    优点:默认做法,使用简便
    缺点:影响数据迁移,不支持分布式计算环境(多个数据库会冲突)
SYS_GUID:
    优点:完美支持分布式计算环境,全局唯一
    缺点:生成时消耗资源多
自定义主键:
    优点:可以根据需求实现任意格式的主键
    缺点:需要自己编写代码或者调用第三方库函数生成,生成时效率低,并且无法保证唯一性

3.特殊情况下的主键生成(自定义方式),这是一种怎样特殊的场景,都是怎么实现的。
如果让我自定义主键,我就用模块名+时间戳的方式生成

使用道具 举报

回复

您需要登录后才可以回帖 登录 | 注册

本版积分规则

久等啦!10张门票开启你的DTCC2017之旅~

2017中国数据库技术大会将于2017年5月11-13日如约而至,本届大会以“数据驱动•价值发现”为主题,共设定2大主场和21个技术专场,云集海内外120+位技术大牛,共同探讨Oracle、MySQL、NoSQL、云端数据库、区块链、深度学习等领域的前瞻性热点话题。
即日起,填写DTCC2017会前调查问卷,即有机会赢取价值2600元的大会门票1张!仅限10张!
----------------------------------------
活动截止时间:2017年5月5日统一公布

问卷入口>>
TOP技术积分榜 社区积分榜 徽章 电子杂志 团队 统计 虎吧 老博客 知识索引树 读书频道 积分竞拍 文本模式 帮助
  ITPUB首页 | ITPUB论坛 | 数据库技术 | 企业信息化 | 开发技术 | 微软技术 | 软件工程与项目管理 | IBM技术园地 | 行业纵向讨论 | IT招聘 | IT文档 | IT博客
  ChinaUnix | ChinaUnix博客 | ChinaUnix论坛 | SAP ERP系统
CopyRight 1999-2011 itpub.net All Right Reserved. 北京皓辰网域网络信息技术有限公司版权所有 联系我们 网站律师 隐私政策 知识产权声明
京ICP证:060528号 北京市公安局海淀分局网监中心备案编号:1101082001 广播电视节目制作经营许可证:编号(京)字第1149号
  
快速回复 返回顶部 返回列表