AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / dba / 问题

问题[uuid](dba)

Martin Hope
blackparrot
Asked: 2022-08-11 23:11:44 +0800 CST

MariaDB UUID 数据类型未正确排序

  • 0

我正在使用 MariaDB 10.8.3。我有一个带有 UUID 类型的 PK 的表。我正在插入在应用程序端生成的有序 UUID。当我检索按 UUID 列排序的表的数据时,它没有按预期排序。例如:

SELECT id_label, date_add FROM mod_label ORDER BY id_label ASC;

检索到的数据是这样的:

在此处输入图像描述

但是,如果我将 UUID 转换为 char 或转换为十六进制,则结果按预期排序:

SELECT id_label, date_add FROM mod_label ORDER BY CAST(id_label AS CHAR(36)) ASC;
SELECT id_label, date_add FROM mod_label ORDER BY HEX(id_label) ASC;

在此处输入图像描述

据我了解,MariaDB 将 UUID 保存为 128 位整数,所以我不理解这种行为。

有人可以向我解释这种行为以及如何解决它吗?

mariadb uuid
  • 1 个回答
  • 61 Views
Martin Hope
Ουιλιαμ Αρκευα
Asked: 2021-10-15 12:29:57 +0800 CST

使用类似短 UUID 的类型作为主键有什么问题?

  • 0

我正在考虑(在 PostgreSQL v13 上uuid_generate_v4())为我的高流量表使用 UUID 类型(with ),而其他表使用 Text 类型(作为主键)通过使用类似于crypt(now()::text, gen_salt('des'))(短 UUID?)的自动生成。

使用这种类似短 UUID 的类型有什么问题?它可以被认为是一种好的做法吗?如果没有,你有什么建议?

假设有一个包含各种外键 (FK) 的表,每个 FK 都是一个 UUID 类型,然后当我们打开该表时,我们会看到一个水平拉伸的长表,或者当我们进行 API 调用时返回一个对象列表他们的身份证,这并不酷。

我正在检查 Net 上可用的一些 API 调用,它们使用一些固定长度为 10 个字符的类似短 UUID 的类型,所以我在想,他们如何在没有任何冲突的情况下获得该结果?它的性能如何?等等

postgresql uuid
  • 1 个回答
  • 504 Views
Martin Hope
Alex Yu
Asked: 2021-07-11 23:32:07 +0800 CST

PostgreSQL:函数 uuid_hash(uuid) 和 uuid_hash_extended(uuid, bigint) 的用途是什么

  • 2

功能uuid_hash和uuid_hash_extended

探索 postgresql 我发现了 2 个看起来很有趣的函数:

SELECT 
        p.proname ,
        obj_description(p.oid) AS func_desc,
        pg_get_function_arguments(p.oid) AS args_def,
        string_to_array(pg_get_function_identity_arguments(p.oid), ','::text) AS args,
        pg_get_function_result(p.oid) AS rettype 
    FROM 
        pg_catalog.pg_proc P        
    WHERE
        proname ~~ 'uuid_hash%'
名字 func_desc args_def 参数 重新输入
uuid_hash 哈希 uuid {uuid} 整数
uuid_hash_extended 哈希 uuid,大整数 {uuid,大整数} 大整数

让我们尝试使用它们:

SELECT 
    uuid_hash(uuid_nil()),
    uuid_hash_extended(uuid_nil(), 0),
    uuid_hash(MD5('hello')::uuid),
    uuid_hash_extended(MD5('hello')::uuid, 0);
uuid_hash uuid_hash_extended uuid_hash uuid_hash_extended
1353656403 -6859010066814654381 1620818621 -4122998508949357891

DB Feedle:https ://www.db-fiddle.com/f/8CG8HaFn6D2mLKLk3LTwx2/0

嗯。看起来很有趣,也许有可能的用途。

切换我注意到uuid_hash_extended出现在 PostgreSQL 11 中的 postgresql 版本。

查看 postgresql 文档 - 我什么也没找到。

网络搜索 - 也没有。

问题

这些功能的目的是什么?

它们可以用来做什么?

更新

A. 答案https://dba.stackexchange.com/a/295517/82983被接受。函数的源码看起来很简单

B. https://stackoverflow.com/a/66848699/1168212中的有趣用法

postgresql uuid
  • 1 个回答
  • 469 Views
Martin Hope
Gus
Asked: 2021-03-03 10:19:45 +0800 CST

如何根据行数和可调的批量大小将 GUID 分配给批量数据

  • 0

我需要为成批的行分配一个通用的 GUID id(供外部进程使用)。

下面是一个简化的设置,描述了我正在寻找的内容:

BASE_TABLE表示此方案中的一个预先存在的表,显然已大大简化。“真实”表中的值应该被认为是随机的;它们在现实生活中不是连续的(即使 ID 也不是真正的 int)

CREATE TABLE BASE_TABLE (
    ID int
    ,VALUE1 varchar(10)
    ,VALUE2 varchar(255)
) 

TARGET_TABLEuniqueIdentifier代表我正在处理的过程的“输出”,它只是需要批量数据为​​每个批次都有一个 BATCHID 的其他东西的输入。现实生活中的批次约为 1000 行。

CREATE TABLE TARGET_TABLE 
(
  ID int
  ,VALUE1 varchar(10)
  ,VALUE2 varchar(255)
  ,BATCHID uniqueIdentifier
)

(添加一些虚拟数据)

DECLARE @DATA1 int
set @DATA1=0
WHILE @DATA1<100
BEGIN
  INSERT INTO BASE_TABLE (ID,VALUE1,VALUE2) VALUES (@DATA1,'v1'+CONVERT(varchar,@DATA1), 'v2'+CONVERT(varchar,@DATA1))
  SET @DATA1=@DATA1+1
END

/** 示例 DESIRED RESULT,批量大小为 5

ID 价值1 价值2 批处理ID
0 v10 v20 38B1B4FB-7F1E-44FD-9336-19095C01C629
1 v11 v21 38B1B4FB-7F1E-44FD-9336-19095C01C629
2 v12 v22 38B1B4FB-7F1E-44FD-9336-19095C01C629
3 v13 v23 38B1B4FB-7F1E-44FD-9336-19095C01C629
4 v14 v24 38B1B4FB-7F1E-44FD-9336-19095C01C629
5 v15 v25 41122454-A743-4545-8F0C-D7B461E072AE
6 v16 v26 41122454-A743-4545-8F0C-D7B461E072AE
7 v17 v27 41122454-A743-4545-8F0C-D7B461E072AE
8 v18 v28 41122454-A743-4545-8F0C-D7B461E072AE
9 v19 v29 41122454-A743-4545-8F0C-D7B461E072AE
10 v110 v210 41122454-A743-4545-8F0C-D7B461E072AE
11 v111 v211 FBDE5513-C869-4F2D-AC4D-40CBEF4A2D48

ETC

重要的结果是,对于每个大小为 N 的批次,有 N 行具有相同的 BatchID,它必须是一个 GUID。

我很确定我可以用光标做我想做的事,但如果可能的话,我想做这样的事情:

select 
ID,VALUE1,VALUE2,
NEWID() OVER(PARTITION BY ROW_NUMBER() OVER (ORDER BY ID)) AS BatchID
from BASE_TABLE

但它无效,因为 NEWID() 不是聚合函数。

sql-server uuid
  • 1 个回答
  • 135 Views
Martin Hope
Ουιλιαμ Αρκευα
Asked: 2021-02-21 07:59:31 +0800 CST

关于 PostgreSQL 中的 UUID 和生成器

  • 1

我正在考虑将 UUID 作为 PK 用于我的新 PostgreSQL 数据库中的所有表,为此我将使用uuid_generate_v5and uuid_ns_dnsoruuid_ns_url函数,但我有一些疑问:

  • 仅在数据库中使用 UUID 是否有任何问题(即性能)?
  • 使用方面有什么优缺点uuid_generate_v4吗?
  • 什么时候使用uuid_ns_dns或uuid_ns_url?(我没有找到有关它的信息)
  • 函数name的参数uuid_generate_v5可以是任何字符串(甚至是空字符串)还是取决于namespace参数?请举例。
postgresql uuid
  • 1 个回答
  • 289 Views
Martin Hope
mbnoimi
Asked: 2021-01-18 02:34:21 +0800 CST

如何将 uuid-ossp 设置为整个服务器的默认扩展?

  • 1

我使用以下 sql 命令为默认的 PostgreSQL 数据库 (postgres) 安装了uuid-ossp,但是每当我创建一个新数据库时,我不得不为每个新数据库再次运行相同的命令。

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";
ALTER EXTENSION "uuid-ossp" SET SCHEMA public;

有什么方法可以安装一次uuid-ossp并确保每个新数据库都默认启用uuid-ossp吗?

附言。我使用 PostgreSQL 版本。13.1

postgresql uuid
  • 1 个回答
  • 2965 Views
Martin Hope
oopoopoop
Asked: 2020-09-04 07:40:41 +0800 CST

我应该将前端生成的 UUIDv6 转换为 binary(16) 以在 SQL Server 中用作集群主键吗?

  • 5

背景

根据前端开发人员的建议,我研究了在我们的新系统中使用 UUID 作为一堆表的主键。从学习随机 UUID 与顺序 UUID 的优缺点,到结合使用非聚集主键和可排序类型的聚集索引,我的研究向我指出了UUIDv6及其实现。

它能够生成如下所示的 UUID(即顺序的):

UUIDv1 UUIDv6 
---------------------------------- -------------- ---------------------- 
5714f720-1268-11e7-a24b-96d95aa38c32 1e712685-714f-6720-a23a-c90103f70be6 
68f820c0-1268-11e7-a24b-96d95aa38c32 1e712686-8f82-60c0-ac07-7d6641ed230d 
7ada38f0-1268-11e7-a24b-96d95aa38c32 1e712687-ada3-68f0-93f8-c1ebf8e6fc8c 
8cc06fd0-1268-11e7-a24b-96d95aa38c32 1e712688-cc06-6fd0-a828-671acd892c6a 
9ea6a6b0-1268-11e7-a24b-96d95aa38c32 1e712689-ea6a-66b0-910c-dbcdb07df7a4

我认为 SQL Server 会很乐意在集群主键(唯一标识符)列中为我排序。

我几乎不知道 SQL Server 如何对 uniqueidentifier 列进行排序。这是升序排序结果:

UUIDv6 唯一标识符已排序 
---------------------------------- 
1e712688-cc06-6fd0- a828-67  1acd892c6a
1e712686-8f82-60c0- ac07-7d  6641ed230d
1e712687-ada3-68f0-93f8- c1 ebf8e6fc8c 
1e712685-714f-6720-a23a- c9 0103f70be6 
1e712689-ea6a-66b0-910c- db cdb07df7a4

这会导致碎片,就像使用随机 UUID 一样。这篇文章解释了它们实际上是如何排序的。

真正的问题

幸运的是,该系统仍在开发中。接下来我应该选择哪些选项?

  1. 重新排序字节,使最高/最低有效字节位于 SQL Server 期望的位置
UUIDv6 UUIDv6 重新排序的字节 
---------------------------------- -------------- ---------------------- 
1e712685-714f-6720-a23a-c90103f70be6 c90103f7-0be6-a23a-6720- 1e712685 714f 
1e712686-8f82-60c0-ac07-7d6641ed230d 7d6641ed-230d-ac07-60c0- 1e712686 8f82 
1e712687-ada3-68f0-93f8-c1ebf8e6fc8c c1ebf8e6-fc8c-93f8-68f0- 1e712687 ada3 
1e712688-cc06-6fd0-a828-671acd892c6a 671acd89-2c6a-a828-6fd0- 1e712688 cc06 
1e712689-ea6a-66b0-910c-dbcdb07df7a4 dbcdb07d-f7a4-910c- 66b0-1e712689 ea6a
  1. 将 UUIDv6 转换为二进制(16)并改用它
UUIDv6 UUIDv6 二进制(16) 
---------------------------------- -------------- ------------------ 
1e712685-714f-6720-a23a-c90103f70be6 1e712685 714f6720a23ac90103f70be6 
1e712686-8f82-60c0-ac07-7d6641ed230d 1e712686 8f8260c0ac077d6641ed230d 
1e712687-ada3-68f0-93f8-c1ebf8e6fc8c 1e712687 ada368f093f8c1ebf8e6fc8c 
1e712688-cc06-6fd0-a828-671acd892c6a 1e712688 cc066fd0a828671a ​​cd892c6a 
1e712689-ea6a-66b0-910c-dbcdb07df7a4 1e712689 ea6a66b0910cdbcdb07df7a4

有问题option 1

UUID 标准在 ID 中嵌入了一个 4 位版本字段。UUIDv6(仍然是非标准的)也遵循该规则。我将重新排序它们的方式将打破这一点。

有问题option 2

我不确定。除了这个,几乎找不到任何人在谈论它,这与这个想法背道而驰。在使用 binary(16) 类型时我还应该注意其他陷阱吗?

谢谢!

sql-server uuid
  • 3 个回答
  • 374 Views
Martin Hope
user1633146
Asked: 2020-01-17 07:32:16 +0800 CST

表性能上的 GUID 与身份 [重复]

  • 3
这个问题在这里已经有了答案:
Guid vs INT - 哪个更好作为主键? (6 个回答)
2年前关闭。

我的问题是使用 guid(数据类型唯一标识符)与使用身份规范(数据类型 int)。是否有任何文章谈论您为什么要使用一个与另一个?我在一家使用 guid 的新公司,它似乎慢了很多,但也许是我的想象。令人惊讶的是,这是我第一次看到它用于一行的唯一性。关于为什么要使用其中一个而不是另一个,您有什么帮助或想法吗?

identity uuid
  • 2 个回答
  • 3055 Views
Martin Hope
Basil Bourque
Asked: 2017-06-03 17:01:34 +0800 CST

Postgres“uuid-ossp”模块中的`uuid_generate_v1mc`:什么是随机多播MAC地址?

  • 3

Postgres的uuid-ossp模块扩展(插件)提供了这种生成UUID值的替代方法。

uuid_generate_v1mc()

此函数生成版本 1 UUID,但使用随机多播 MAC 地址而不是计算机的真实 MAC 地址。

我假设这里的目的是解决有关记录数据库服务器 MAC 地址的安全问题。因此,我们希望在其位置使用另一个备用MAC 地址作为生成版本 1 UUID值的一部分。

我的问题是:这个“随机多播 MAC 地址”到底是什么来代替数据库服务器自己的 MAC?

我用谷歌搜索/搜索但没有找到很好的解释。这是在数据库服务器的本地网络上找到的当前正在使用的其他 MAC 吗?

在 Postgres 的主键上下文中,使用此命令涉及哪些实际问题?

重复调用的示例数据uuid_generate_v1mc,第一列中包含 UUID 值:

e2a03f96-0e7f-11ea-9838-6bba9e946aa0    Bird    2019-11-24 06:01:41.394401
e30c64be-0e7f-11ea-8540-9b38c7ef1573    Bird    2019-11-24 06:01:42.108340
e33037ea-0e7f-11ea-ab4b-abc4bdb5ea40    Bird    2019-11-24 06:01:42.342973
e3495cca-0e7f-11ea-8070-03c037680e82    Bird    2019-11-24 06:01:42.507537
e3668dd6-0e7f-11ea-b4e7-87c2c65a3777    Bird    2019-11-24 06:01:42.699283
postgresql uuid
  • 1 个回答
  • 2595 Views
Martin Hope
d9k
Asked: 2016-08-08 19:22:44 +0800 CST

psql 9.5:gen_random_uuid() 不工作

  • 19

SELECT gen_random_uuid()

产生输出

ERROR:  function gen_random_uuid() does not exist
SQL state: 42883
Hint: No function matches the given name and argument types. You might need to add explicit type casts.

我CREATE EXTENSION pgcrypto;在选定的数据库上运行并且SELECT gen_random_bytes(1)运行良好(gen_random_bytes不适用于pgcrypto未手动创建扩展的其他数据库)。

% psql --version
psql (PostgreSQL) 9.5.3

Ubuntu 版本是 16.04。

postgresql-9.5 uuid
  • 1 个回答
  • 38710 Views

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目

    • 12 个回答
  • Marko Smith

    如何让sqlplus的输出出现在一行中?

    • 3 个回答
  • Marko Smith

    选择具有最大日期或最晚日期的日期

    • 3 个回答
  • Marko Smith

    如何列出 PostgreSQL 中的所有模式?

    • 4 个回答
  • Marko Smith

    列出指定表的所有列

    • 5 个回答
  • Marko Smith

    如何在不修改我自己的 tnsnames.ora 的情况下使用 sqlplus 连接到位于另一台主机上的 Oracle 数据库

    • 4 个回答
  • Marko Smith

    你如何mysqldump特定的表?

    • 4 个回答
  • Marko Smith

    使用 psql 列出数据库权限

    • 10 个回答
  • Marko Smith

    如何从 PostgreSQL 中的选择查询中将值插入表中?

    • 4 个回答
  • Marko Smith

    如何使用 psql 列出所有数据库和表?

    • 7 个回答
  • Martin Hope
    Jin 连接到 PostgreSQL 服务器:致命:主机没有 pg_hba.conf 条目 2014-12-02 02:54:58 +0800 CST
  • Martin Hope
    Stéphane 如何列出 PostgreSQL 中的所有模式? 2013-04-16 11:19:16 +0800 CST
  • Martin Hope
    Mike Walsh 为什么事务日志不断增长或空间不足? 2012-12-05 18:11:22 +0800 CST
  • Martin Hope
    Stephane Rolland 列出指定表的所有列 2012-08-14 04:44:44 +0800 CST
  • Martin Hope
    haxney MySQL 能否合理地对数十亿行执行查询? 2012-07-03 11:36:13 +0800 CST
  • Martin Hope
    qazwsx 如何监控大型 .sql 文件的导入进度? 2012-05-03 08:54:41 +0800 CST
  • Martin Hope
    markdorison 你如何mysqldump特定的表? 2011-12-17 12:39:37 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 对 SQL 查询进行计时? 2011-06-04 02:22:54 +0800 CST
  • Martin Hope
    Jonas 如何从 PostgreSQL 中的选择查询中将值插入表中? 2011-05-28 00:33:05 +0800 CST
  • Martin Hope
    Jonas 如何使用 psql 列出所有数据库和表? 2011-02-18 00:45:49 +0800 CST

热门标签

sql-server mysql postgresql sql-server-2014 sql-server-2016 oracle sql-server-2008 database-design query-performance sql-server-2017

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve