SQL实现UUIDv7
当我们选择数据库的主键类型时,通常会考虑自增数字或者 UUID。但是这两种类型都有优缺点,自增字段简单有序,性能良好,最大的问题是无法保证全局唯一性,分布式场景受限;UUID 具有全局唯一性,适合分布式应用,但是早期版本的 UUID 具有随机性,性能不如自增数字。
不过,随着 UUIDv7 的出现,已经解决了 UUID 没有随着时间递增的问题,它的组成如下:
UUIDv7 包含 128 比特(每 4 比特组成一个十六进制数字),具体包含:
- 48 比特时间戳(精度为毫秒);
- 4 比特UUID 版本(7);
- 12 比特随机数字;
- 2 比特(UUID 类型);
- 62 比特随机数字。
完整的 UUIDv7 介绍可以参考 RFC 9562。
UUIDv7 最大的优势是具有时间递增性和全局唯一性,非常适合作为数据库的主键,包括分布式数据库。
很多编程语言都提供了生成 UUIDv7 的代码库,不过今天我们要介绍的是在数据库中使用 SQL 实现 UUIDv7,完全不需要依赖其他组件。
首先,我们来看一下 PostgreSQL 中的实现:
select-- timestamplpad(to_hex(((extract(epoch from now()) * 1000)::bigint >> 16)), 8, '0') || '-' ||lpad(to_hex(((extract(epoch from now()) * 1000+ (date_part('milliseconds', now())::bigint % 1000))::bigint & 0xffff)), 4, '0') || '-' ||-- versionlpad(to_hex((0x7000 + (random() * 0x0fff)::int)), 4, '0') || '-' ||-- variantlpad(to_hex((0x8000 + (random() * 0x3fff)::int)), 4, '0') || '-' ||-- randomnesslpad(to_hex((floor(random() * (2^48))::bigint >> 16)), 12, '0') AS uuid7;uuid7 |
------------------------------------+
01904fcb-0ee8-7d9c-a192-000052989c99|
把上面的查询定义为一个函数,就可以实现代码复用了。
接下来是 SQLite 中的实现:
select-- timestampformat('%08x', ((strftime('%s') * 1000) >> 16)) || '-' ||format('%04x', ((strftime('%s') * 1000)+ ((strftime('%f') * 1000) % 1000)) & 0xffff) || '-' ||-- versionformat('%04x', 0x7000 + abs(random()) % 0x0fff) || '-' ||-- variantformat('%04x', 0x8000 + abs(random()) % 0x3fff) || '-' ||-- randomnessformat('%012x', abs(random()) >> 16) as value;value |
------------------------------------+
01904fd0-3dae-7460-8d4c-7d0c6b483299|
SQlite 没有自定义函数,可以把上面的查询定义为一个视图,实现代码复用。
其他数据库也可以按照相同的思路实现,欢迎补充。
相关文章:

SQL实现UUIDv7
当我们选择数据库的主键类型时,通常会考虑自增数字或者 UUID。但是这两种类型都有优缺点,自增字段简单有序,性能良好,最大的问题是无法保证全局唯一性,分布式场景受限;UUID 具有全局唯一性,适合…...

2024期权交易佣金手续费最低是多少?期权交易有哪些成本?
显性成本 期权交易的显性成本包含期权交易的佣金和交易所费用,分别支付给券商和交易所,统一由券商代收。 佣金 期权佣金是期权交易时支付给券商的费用,佣金通常以交易金额的一定比例计算,可以是固定费用,也可以是滑…...

合合信息智能文档抽取:赋能不良资产管理行业的数字化转型
官.网地址:合合TextIn - 合合信息旗下OCR云服务产品 随着数字化浪潮的汹涌澎湃,全球各行各业正经历着前所未有的变革。人工智能技术的快速发展,以其独特的创新能力和应用潜力,正在深刻地改变着业务模式,推动产业效率的…...

【别再用Excel了!】这款免费可视化工具能帮你轻松提升效率
现代数据分析和展示的需求已经远远超出了传统工具的能力,尤其是在需要快速、直观和高效地处理复杂数据的情况下。山海鲸可视化通过其强大的功能和易用性,成为了设计师以及各类新手用户的理想选择。下面我就以一个可视化设计师的角度,和大家简…...
python holidays获取中国节日
在Python中,holidays库是一个流行的库,用于处理各种国家和地区的公共假期。然而,需要注意的是,截至2024年,holidays库的官方版本可能并不直接支持中国的所有节日。不过,我们可以通过扩展或自定义该类库来添…...

Jenkins流水线发布,一篇就解决你的所有疑惑
这次搭建的项目比较常规,前端是react写的,后端是springboot,并且由于是全栈开发,所以是在同一个项目中。接下来我演示下怎么用jenkins进行自动化发布。 1.jenkins必装插件 这里用到的是jenkinsFile主要是基于Groovy这个沙盒,有些前置插件。这里使用maven进行打包,所以需…...

安装zabbix时报错Could not resolve host: mirrors.huaweicloud.com;Unknown error解决办法
目录 1、问题原因 2、解决办法 3、知识拓展 DNS的区别 DNS配置文件解析 域名解析过程 4、书籍推荐 当安装Zabbix server,Web前端,agent时出现: [rootsc-zabbix-server ~]# yum install zabbix-server-mysql zabbix-agent安装过程中会出…...
【Linux】CentOS 7 安装配置 postfix 邮件服务器随笔
本文并不是完整配置教程,只是配置过程中零散代码随笔,不成系统 记录配置 PostFix 邮件服务器过程,由于经常用到,会不定时更新完善 yum install -y postfix dovecot cyrus-sasl-plain cyrus-sasl mailx# 设置hostname hostnamect…...

vue3 使用JsMind的方法,以及引入提示报错,无法找到模块“jsmind”的声明文件
最终结果: 一、使用:使用yarn或者npm 安装 yarn add jsmind npm install vue-jsmind 二、引入 两种方法:(如果这样引入没问题按照这样引入) import "jsmind/style/jsmind.css"; import JsMind from &quo…...

狗都能看懂的DBSCAN算法详解
文章目录 DBSCAN简介DBSCAN算法流程运行机制举个实例 DBSCAN算法特点DBSCAN参数选取技巧 ϵ \epsilon ϵ的选取:找突变点MinPts的选取 DBSCAN简介 DBSCAN(Density-Based Spatial Clustering of Applications with Noise,具有噪声的基于密度的…...
运维岗高危操作
序号 高危操作指令 可能存在风险 维护操作要求 1 rm –rf rm –rf是删除文件夹和里面附带内容的一种最快捷的方法,可能会文件误删,导致数据丢失 使用rm –rf命令时千万要小心,可以在.bashrc里面添加: alias rm ‘rm -i’ ,…...

【ajax基础02】URL详解
目录 一:什么是URL 二:URL组成 协议 编辑 域名(在url中必须写) 资源路径 三:URL查询参数 定义: 语法格式: 如何利用axios实现特定数据查询: 语法格式: 案例:…...

MySQL 7种Join的定义图解示范结果(所有join类型)
文章目录 MySQL 7种Join的定义&图解&示范&结果(所有join类型)基本知识笛卡尔积 建表&填充数据1-Join不带条件account筛选 1-Inner Join 内连接不带条件account相同where筛选玩点特殊的 2-Left Join 左连接不带条件account筛选 3-Right J…...
在 Oracle Linux 8.9 上安装 FFmpeg 的完整指南
在 Oracle Linux 8.9 上安装 FFmpeg 的完整指南 在 Oracle Linux 8.9 上安装 FFmpeg 的完整指南准备工作安装步骤1. 更新系统2. 启用 EPEL 仓库3. 启用 RPM Fusion 仓库4. 安装 DNF 插件核心包5. 启用 CodeReady Builder 仓库6. 安装 FFmpeg7. 验证安装 可能遇到的问题注意事项…...
python爬虫之实现edge无头浏览器和规避检测
python爬虫之实现edge无头浏览器和规避检测 爬取百度网页源码但不打开浏览器 实现代码如下: #需求:实现edge无头浏览器和规避检测 from selenium import webdriver from time import sleep from selenium.webdriver.edge.options import Options# 实现…...
每天一个数据分析题(三百八十七)- 线性回归分析
下列关于线性回归分析中的残差(Residuals)的假设说法正确的是? A. 残差均值总是为零 B. 残差均值总是小于零 C. 残差均值总是大于零 D. 以上说法都不对 数据分析认证考试介绍:点击进入 题目来源于CDA模拟题库 点击此处获取…...
Perl中的eval块:深入解析与应用
引言 Perl是一种功能强大的脚本语言,以其灵活性和强大的文本处理能力而闻名。在Perl编程中,eval块是一个非常重要的特性,它允许开发者捕获和处理异常,同时也提供了一种执行动态代码的方法。本文将详细探讨eval块的作用、用法以及…...
分享AI学习笔记之Python
当你说"抓取网站数据"时,通常指的是网络爬虫(web scraping)或网络抓取(web crawling)。Python提供了很多库可以帮助你实现这个功能,其中最常见的有requests(用于发送HTTP请求…...
多版本GCC安装及切换
目录 1 背景2 安装2.1 Ubuntu 20.042.2 Ubuntu 18.04 3 配置4 切换4.1 切换到版本94.2 切换到版本10 1 背景 最近在研究C20中的协程需要安装GCC版本10。用到GCC多版本切换,记录步骤。 2 安装 2.1 Ubuntu 20.04 运行如下命令安装两个版本编译器: sudo apt insta…...

Redis进阶 - 朝生暮死之Redis过期策略
概述 Redis 是一种常用的内存数据库,其所有的数据结构都可以设置过期时间,时间一到,就会自动删除。你可以想象 Redis 内部有一个死神,时刻盯着所有设置了过期时间的 key,寿命一到就会立即收割。 你还可以进一步站在死神…...

XCTF-web-easyupload
试了试php,php7,pht,phtml等,都没有用 尝试.user.ini 抓包修改将.user.ini修改为jpg图片 在上传一个123.jpg 用蚁剑连接,得到flag...
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以?
Golang 面试经典题:map 的 key 可以是什么类型?哪些不可以? 在 Golang 的面试中,map 类型的使用是一个常见的考点,其中对 key 类型的合法性 是一道常被提及的基础却很容易被忽视的问题。本文将带你深入理解 Golang 中…...

深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
基础测试工具使用经验
背景 vtune,perf, nsight system等基础测试工具,都是用过的,但是没有记录,都逐渐忘了。所以写这篇博客总结记录一下,只要以后发现新的用法,就记得来编辑补充一下 perf 比较基础的用法: 先改这…...

[10-3]软件I2C读写MPU6050 江协科技学习笔记(16个知识点)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16...

Psychopy音频的使用
Psychopy音频的使用 本文主要解决以下问题: 指定音频引擎与设备;播放音频文件 本文所使用的环境: Python3.10 numpy2.2.6 psychopy2025.1.1 psychtoolbox3.0.19.14 一、音频配置 Psychopy文档链接为Sound - for audio playback — Psy…...

12.找到字符串中所有字母异位词
🧠 题目解析 题目描述: 给定两个字符串 s 和 p,找出 s 中所有 p 的字母异位词的起始索引。 返回的答案以数组形式表示。 字母异位词定义: 若两个字符串包含的字符种类和出现次数完全相同,顺序无所谓,则互为…...

Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
uniapp 实现腾讯云IM群文件上传下载功能
UniApp 集成腾讯云IM实现群文件上传下载功能全攻略 一、功能背景与技术选型 在团队协作场景中,群文件共享是核心需求之一。本文将介绍如何基于腾讯云IMCOS,在uniapp中实现: 群内文件上传/下载文件元数据管理下载进度追踪跨平台文件预览 二…...
uniapp 集成腾讯云 IM 富媒体消息(地理位置/文件)
UniApp 集成腾讯云 IM 富媒体消息全攻略(地理位置/文件) 一、功能实现原理 腾讯云 IM 通过 消息扩展机制 支持富媒体类型,核心实现方式: 标准消息类型:直接使用 SDK 内置类型(文件、图片等)自…...