`
pouyang
  • 浏览: 322436 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

数据库 SYS_GUID与sequence

阅读更多
Oracle8i引入了SYS_GUID这个概念,它同Oracle管理员所使用的传统的序列(sequence)相比具有诸多优势。一个序列生成器只是简单地创建从给定的起点开始的一系列整数值,而且它被用在选择陈述式的时候自动地递增该系列。

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

  此外,序列必须是DML陈述式的一部分,因此它需要一个到数据库的往返过程(否则它就不能保证其值是唯一的)。SYS_GUID源自不需要对数据库进行访问的时间戳和机器标识符,这就节省了查询的消耗。

  create table use_seq_table(id integer);

  create sequence use_seq_sequence;

  insert into use_seq_table values (use_seq_sequence_value.nextval);

  REM - for some reason, the documentation uses raw(32)

  create table use_guid_table(id raw(16));

  insert into use_guid_table(sys_guid());

  很多应用程序都依靠序列生成器来创建数据行的主关键字,这些数据行没有一个明显的主值,这也就是说,在这样的数据集里一条记录的创建就会让数据列发生改变。因此,管理员可能会对在表格中将SYS_GUID用作主关键字而不使用序列数感兴趣。这在对象在不同机器的不同数据库里生成以及需要在后来合并到一起的情况下很有用。

  但是,SYS_GUID所生成的值是一个16位的原始值。序列所生成的整数不会使用16位(的值),除非它达到了10的30次方(每个字节有两位),而且数字是相当独特的:

  SQL> select dump(123456789012345678901234567890) from dual;

  DUMP(123456789012345678901234567890)

  --------------------------------------------------------------

  Typ=2 Len=16: 207,13,35,57,79,91,13,35,57,79,91,13,35,57,79,91

  较短的值就意味着用于表格和索引的存储空间更少,以及查询访问的时间更短。

  使用SYS_GUID或者序列会在数据库使用周期里的某些地方造成性能上的消耗;问题就是在哪里。对于SYS_GUID而言,性能上的影响在查询时间和创建时间上(在表格里要创建更多的块和索引以容纳数据)。对序列而言,性能上的影响在查询期间,在这个时候,SGA序列的缓冲区被用光。在缺省情况下,一个序列一次会缓冲20个值。如果数据库没有使用这些值就关闭了,它们就会被丢失。

  SYS_GUID生成的值的另一个显著的不足之处是,管理这些值会变得困难得多。你必须(手动)输入它们或者通过脚本来填充它们,或者将它们作为Web参数来传递。

  出于这些原因,将SYS_GUID作为一个主关键字不是一个很好主意,除非是在一个并行的环境里或者希望避免使用管理序列生成器的情况下。


select sys_guid() from dual
分享到:
评论

相关推荐

    guid.zip_C# guid 算法_GUID 算法_guid 代码

    标签中的"c#_guid_算法 guid_算法 guid_代码"进一步强调了这个代码示例是关于`Guid`生成算法的实现。这意味着在压缩包内的`guid算法`文件很可能是C#源代码文件,里面可能包含了一个或多个自定义`Guid`生成器的类,...

    GUID.zip_guid_guid 生成器

    标题中的“GUID.zip_guid_guid 生成器”是一个用于创建全局唯一标识符(GUID)的工具,它模拟了Visual Studio(VS)内置的GUID生成功能。GUID,全称Globally Unique Identifier,是一种在大量分布式系统中确保每个...

    ZLXA_GUID.zip

    Oracle数据库在许多场景中需要生成全局唯一标识符(GUID),以确保数据的唯一性和可追踪性。"ZLXA_GUID.zip"压缩包内的资源,尤其是"ZLXA_GUID.fnc"文件,似乎提供了一个用于在Oracle环境中自动生成定制长度GUID的...

    100 guid_guid1c_

    标题中的"100 guid_guid1c_"似乎指的是一个与GUID(全局唯一标识符)相关的工具或资源,特别是与"1c"这个特定环境或版本有关。描述中提到的"get guid 1c"进一步证实了这是一个获取或处理1C环境下的GUID的工具。1C...

    数据库主键生成GUID

    数据库主键生成GUID 在数据库设计中,选择合适的主键类型是非常重要的。GUID(Global Unique Identifier,全局唯一标识符)是一种常用的主键类型,它可以提供唯一的标识符,用于标识数据库中的每一条记录。 GUID的...

    vs2019_GUID生成工具.rar

    GUID,全局唯一标识符(Globally Unique Identifier),在软件开发中扮演着重要角色,特别是在创建COM组件、数据库记录、Windows注册表键值等需要唯一标识的地方。这个工具可以帮助开发者快速生成这些必要的唯一标识...

    GUID Generator.rar_generator_guid_tool

    标题中的"GUID Generator.rar_generator_guid_tool"表明这是一个用于生成全局唯一标识符(GUID)的工具。GUID,全称Global Unique Identifier,是由微软公司提出的一种在分布式系统中保证唯一性的标识符标准。它由...

    PyPI 官网下载 | django_guid-0.2.1-py3-none-any.whl

    在数据库操作中,尤其是在分布式系统中,GUID经常被用来确保每个记录的唯一性,避免冲突。该库可能包含了方便的模型字段和管理器方法,使得在Django应用中创建和管理GUID变得轻松简单。 在使用这个库之前,首先需要...

    OracleGoldenGate针对表没有主键或唯一索引的解决方案[归类].pdf

    需要在 Oracle GoldenGate 中配置表,以便使用 SYS_GUID 列来唯一标识行。 3. 参考文献 本文档中使用的软件组件: * Oracle Database 10.2 或更高版本 * Oracle GoldenGate 10.4 或更高版本 附录 A: 示例表配置 ...

    pdiusbd12.rar_PDIUSBD12 USB_USB SCH_d12_guid829_usb d12

    这个设备是基于Philips(现已被NXP半导体收购)的D12芯片,符合USB 1.1规范,且与GUID829相关的USB设备接口有关。"d12"可能指的是芯片型号或者版本号。 描述"USB 1.1 pilipls D12 fireware+software+sch"进一步确认...

    mysql_guid主键生成方式范例

    MySQL中的GUID(Globally Unique Identifier)主键生成方式是一种确保数据库中每一条记录具有唯一标识的方法,尤其在分布式系统中十分常见。本示例主要介绍如何通过Hibernate框架配置,来实现MySQL数据库中GUID主键...

    GUID.rar_guid

    全局唯一标识符(GUID,Globally Unique Identifier)是一种在信息技术领域中广泛使用的标识符,特别是在软件开发、数据库设计和网络编程中。GUID是由128位数字组成的,通常以32位十六进制的形式表示,例如:`{...

    ORCALE语句大全

    - 创建触发器: `create trigger student_trigger before insert on student for each row when(new.SNo is null) begin select student_sequence.nextval into:new.SNo from dual;end;` - 插入记录: `insert into ...

    mysql数据库转瀚高数据库所需要的函数列表

    1、mysql数据库转国产化瀚高数据库; 2、有些函数在瀚高数据库中不存在,需要添加自定义函数。

    guid.zip_The Hidden_guid

    This is a Visual Basic 6 project that creates a GUID. It contains the function "CreateGUIDStr()". This function returns a GUID. The function calls some APIs, but this work is hidden from the user. ...

    JBPM_Users_Guid

    该组件处理与流程相关的身份验证和授权逻辑。例如,它可以确定哪些用户或角色能够执行特定的任务。 ##### 6. JBoss jBPM Job Executor 这是一个后台服务,负责调度和执行流程中的异步任务。 #### 三、教程示例 ...

    C#_GUID图片处理demo

    在本"C#_GUID图片处理demo"项目中,开发者运用了C#编程语言来实现了一系列的图片处理功能,包括但不限于转换图片为黑白效果和柔化处理。这些功能在图像处理领域有着广泛的应用,例如照片编辑、艺术创作以及图像分析...

    driver_Source.rar_guid829

    标题中的"driver_Source.rar_guid829"暗示了这是一个与驱动程序源代码相关的压缩包,可能包含一个特定的示例项目或教程,其中"guid829"可能是该资源的唯一标识符或者是某个特定版本的标记。描述指出是"D12 DDK 的...

    netcore_guid3.1.pdf

    标题和描述提及了“netcore_guid3.1.pdf”,文档的标题暗示了文档是一个关于.NET Core 3.1的指导手册或指南。.NET Core 3.1是一个广泛使用的开源、跨平台的.NET实现,用于创建现代网络应用、云服务以及其他应用程序...

Global site tag (gtag.js) - Google Analytics