Oracle Universal Unique Identifier (UUID)

本文介绍Oracle生成全局唯一ID的函数SYS_GUID,后续会对SYS_GUID和Sequence两种方法进行比较。

SYS_GUID 函数生成并返回一个由 16 个字节组成的全局唯一标识符(RAW 值)。在大多数平台上,生成的标识符由主机标识符、调用该函数的进程或线程的进程或线程标识符以及该进程或线程的非重复值(字节序列)组成。

create table loc as select * from locations;
ALTER TABLE loc ADD (uid_col RAW(16));
UPDATE loc SET uid_col = SYS_GUID();

SELECT location_id, uid_col FROM loc
   ORDER BY location_id, uid_col;

LOCATION_ID UID_COL
----------- --------------------------------
       1000 27C94AC98E2B13C5E0634600000A203B
       1100 27C94AC98E2C13C5E0634600000A203B
       1200 27C94AC98E2D13C5E0634600000A203B
       1300 27C94AC98E2E13C5E0634600000A203B
       1400 27C94AC98E2F13C5E0634600000A203B
       1500 27C94AC98E3013C5E0634600000A203B
       1600 27C94AC98E3113C5E0634600000A203B
       1700 27C94AC98E3213C5E0634600000A203B
       1800 27C94AC98E3313C5E0634600000A203B
       1900 27C94AC98E3413C5E0634600000A203B
       2000 27C94AC98E3513C5E0634600000A203B
       2100 27C94AC98E3613C5E0634600000A203B
       2200 27C94AC98E3713C5E0634600000A203B
       2300 27C94AC98E3813C5E0634600000A203B
       2400 27C94AC98E3913C5E0634600000A203B
       2500 27C94AC98E3A13C5E0634600000A203B
       2600 27C94AC98E3B13C5E0634600000A203B
       2700 27C94AC98E3C13C5E0634600000A203B
       2800 27C94AC98E3D13C5E0634600000A203B
       2900 27C94AC98E3E13C5E0634600000A203B
       3000 27C94AC98E3F13C5E0634600000A203B
       3100 27C94AC98E4013C5E0634600000A203B
       3200 27C94AC98E4113C5E0634600000A203B

23 rows selected.

注意以上输出中的第12-13字节是有序的,从B1,C1,到40,41。这模拟了sequence的特点,但这不是必然的,例如在不同的节点上,如RAC。

查询时,直接使用uid_col和rawtohex(uid_col)显式转换的结果都是一样的,说明前者数据库进行了隐式转换。

SQL> desc loc
 Name                                      Null?    Type
 ----------------------------------------- -------- ----------------------------
 LOCATION_ID                                        NUMBER(4)
 STREET_ADDRESS                                     VARCHAR2(40)
 POSTAL_CODE                                        VARCHAR2(12)
 CITY                                      NOT NULL VARCHAR2(30)
 STATE_PROVINCE                                     VARCHAR2(25)
 COUNTRY_ID                                         CHAR(2)
 UID_COL                                            RAW(16)

SQL> select rawtohex(uid_col) from loc;

RAWTOHEX(UID_COL)
--------------------------------
27C94AC98E2B13C5E0634600000A203B
27C94AC98E2C13C5E0634600000A203B
27C94AC98E2D13C5E0634600000A203B
27C94AC98E2E13C5E0634600000A203B
27C94AC98E2F13C5E0634600000A203B
27C94AC98E3013C5E0634600000A203B
27C94AC98E3113C5E0634600000A203B
27C94AC98E3213C5E0634600000A203B
27C94AC98E3313C5E0634600000A203B
27C94AC98E3413C5E0634600000A203B
27C94AC98E3513C5E0634600000A203B
27C94AC98E3613C5E0634600000A203B
27C94AC98E3713C5E0634600000A203B
27C94AC98E3813C5E0634600000A203B
27C94AC98E3913C5E0634600000A203B
27C94AC98E3A13C5E0634600000A203B
27C94AC98E3B13C5E0634600000A203B
27C94AC98E3C13C5E0634600000A203B
27C94AC98E3D13C5E0634600000A203B
27C94AC98E3E13C5E0634600000A203B
27C94AC98E3F13C5E0634600000A203B
27C94AC98E4013C5E0634600000A203B
27C94AC98E4113C5E0634600000A203B

23 rows selected.

SQL> select city from loc where uid_col='27C94AC98E2B13C5E0634600000A203B';

CITY
------------------------------
Roma

SQL> select city from loc where uid_col=hextoraw('27C94AC98E2B13C5E0634600000A203B');

CITY
------------------------------
Roma

SYS_GUID的高并发插入性能比sequence要好,引发的latch更少,也就是scalability更好。但缺点是:

  • 占用空间较多
  • 由于数据较分散,后续查询时会引发更多的I/O。

所以,选用Sequence还是SYS_GUID,实际上没有明确的答案。需要视具体情况而定。后续有时间再做详细讨论。

参考

  • SQL Language Reference: SYS_GUID

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/923834.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

基于机器视觉的表面缺陷检测

基于机器视觉的表面缺陷检测存在的问题与难点 - AVT相机|AVT红外相机|万兆网相机EVT|VIEWORKS线扫相|映美精相机|Specim多光谱相机|Adimec相机|Basler相机|富士能FUJINON镜头|理光RICOH镜头|OPTO远心镜头|SPO远心镜头|Navtar镜头|VST镜头|CCS光源|3D视觉引导机床上下料系统 (完…

SpringBoot整合MQTT利用EMQX完成消息的发布与接收+Python模拟硬件测试通信

教程说明 本教程主要内容为使用SpringBoot整合MQTT利用EMQX代理服务完成MQTT的消息发送与接收,然后用Python模拟硬件与SpringBoot应用进行了MQTT消息的通信,教程详细,并在最后讲解了开发中的注意事项,本教程适用于物联网领域、Ja…

IntelliJ IDEA 中,自动删除无用导包

在 IntelliJ IDEA 中,自动删除无用导包是一个提升代码整洁性和开发效率的重要功能。以下是实现这一功能的详细步骤: 一、通过快捷键手动删除无用导包 打开Java文件:在IDEA中打开你需要操作的Java文件。 使用快捷键: 在Windows系…

表格数据处理中大语言模型的微调优化策略研究

论文地址 Research on Fine-Tuning Optimization Strategies for Large Language Models in Tabular Data Processing 论文主要内容 这篇论文的主要内容是研究大型语言模型(LLMs)在处理表格数据时的微调优化策略。具体来说,论文探讨了以下…

如何编写一个 Vue 3 应用:模板插值示例

Vue.js 是一个渐进式的 JavaScript 框架,用于构建用户界面。在本篇博客中,我们将通过一个简单的示例来学习如何使用 Vue 3 创建一个基本的应用。这个示例将展示如何使用 Vue 的模板插值和事件处理来构建一个简单的点击计数器。 步骤 1: 准备工作 首先&…

基于混合ABC和A*算法复现

基于混合ABC和A*算法复现 一、背景介绍二、算法原理(一)A*算法原理(二)人工蜂群算法原理(三)混合ABC和A*算法策略 三、代码实现(一)数据准备(二)关键函数实现…

2024 APMCM亚太数学建模C题 - 宠物行业及相关产业的发展分析和策略(详细解题思路)

在当下, 日益发展的时代,宠物的数量应该均为稳步上升,在美国出现了下降的趋势, 中国 2019-2020 年也下降,这部分变化可能与疫情相关。需要对该部分进行必要的解释说明。 问题 1: 基于附件 1 中的数据及您的团队收集的额…

鸿蒙MVVM模式介绍与使用

文章目录 鸿蒙MVVM模式介绍与使用背景MVVM模式介绍相关装饰器介绍State状态变量Prop、Link的作用 MVVM架构模式的实现以及相关装饰器的使用具体实现效果 总结 鸿蒙MVVM模式介绍与使用 背景 最近在学习鸿蒙开发,想到了以前写安卓移动端应用时经常会用到的MVVM架构模式,就想着能…

Jmeter测试工具的安装和使用,mac版本,jmeter版本5.2.1

Jmeter测试工具的安装和使用JSON格式请求 一、安装1、安装jdk包和设置java环境2、去官网下载Jmeter3、解压后,打开mac终端,进入apache-jmeter的bin文件开启jmeter 二、使用jmeter1、添加线程2、添加HTTP请求3、配置请求的协议、IP地址、端口号、请求方法…

Spring Boot教程之十: 使用 Spring Boot 实现从数据库动态下拉列表

使用 Spring Boot 实现从数据库动态下拉列表 动态下拉列表(或依赖下拉列表)的概念令人兴奋,但编写起来却颇具挑战性。动态下拉列表意味着一个下拉列表中的值依赖于前一个下拉列表中选择的值。一个简单的例子是三个下拉框,分别显示…

Vue前端开发2.3.6 列表渲染指令

在Vue.js中,v-for指令是渲染列表的关键工具,支持从数组、对象、数字和字符串中生成列表。它简化了商品列表等重复元素的创建。为了优化性能,key属性为每个列表项提供唯一标识,帮助Vue追踪节点身份,实现元素重用。实战中…

敏捷开发02:敏捷开发之Scrum开发框架介绍

一、什么是 Scrum 1.1 Scrum 定义 Scrum 是敏捷开发方法之一,它使用比较广泛。 敏捷的其它开发方法还有 XP(极限编程)、FDD(特性驱动开发)、Crystal(水晶方法)、TDD(测试驱动开发)、DSDM(动态系统开发)等等敏捷方法。 Scrum-Guide 中定义的 Scrum: S…

使用mingw+CMake在Windows平台编译OpenCV

1. 安装mingw和cmake cmake的安装比较简单,百度一下完成相关操作即可,笔者安装的是3.24.3版本。 Mingw的安装也有很多相关文章,不过我使用的是安装QT时附带安装的mingw,其路径为D:\software\Qt\Tools\mingw1120_64。其中的bin文件…

能源电力企业安全数据内外网文件交换

在数字化浪潮的推动下,能源电力行业数据交换的频率急剧上升,涉及的视频、研发、设计等各类文件数量庞大。这些文件的内外网传输不仅要追求速度,更要确保数据安全。随着国家对数据安全重视程度的提高,《网络安全法》和《数据安全法…

突破内存限制:Mac Mini M2 服务器化实践指南

本篇文章,我们聊聊如何使用 Mac Mini M2 来实现比上篇文章性价比更高的内存服务器使用,分享背后的一些小的思考。 希望对有类似需求的你有帮助。 写在前面 在上文《ThinkPad Redis:构建亿级数据毫秒级查询的平民方案》中,我们…

C++ 二叉搜索树(Binary Search Tree, BST)深度解析与全面指南:从基础概念到高级应用、算法优化及实战案例

🌟个人主页:落叶 🌟当前专栏: C专栏 目录 ⼆叉搜索树的概念 ⼆叉搜索树的性能分析 ⼆叉搜索树的插⼊ ⼆叉搜索树的查找 二叉搜索树中序遍历 ⼆叉搜索树的删除 cur的左节点为空的情况 cur的右节点为空的情况 左,右节点都不为…

数据库、数据仓库、数据湖、数据中台、湖仓一体的概念和区别

数据库、数据仓库、数据湖、数据中台和湖仓一体是数据管理和分析领域的不同概念,各自有不同的特点和应用场景。以下是它们的主要区别: 1. 数据库(Database) 定义:结构化的数据存储系统,用于高效地存储、检…

RabbitMQ原理架构解析:消息传递的核心机制

文章目录 一、RabbitMQ简介1.1、概述1.2、特性 二、RabbitMQ原理架构三、RabbitMQ应用场景3.1、简单模式3.2、工作模式3.3、发布订阅3.4、路由模式3.5 主题订阅模式 四、同类中间件对比五、RabbitMQ部署5.1、单机部署5.2、集群部署(镜像模式)5.3、K8s部署…

idea_常用设置

相关设置 项目的JDK设置out目录取消自动更新设置主题设置菜单和窗口字体大小滚轮调节字体大小显示行号与方法分隔符代码智能提示忽略大小写自动导包配置设置项目文件编码设置控制台的字符编码修改类头的文档注释信息设置自动编译 项目的JDK设置 File -> Project Structure -…

Redis的管道操作

在现代应用程序中,Redis作为一种高性能的内存数据库,被广泛用于缓存、消息队列、实时分析等场景。为了进一步提高Redis的性能,Redis提供了管道(Pipeline)操作,允许客户端将多个命令一次性发送到服务器&…