还在使用 Jaeger/Sentry?Uptrace 是一个 开源 APM,用于 OpenTelemetry,您可以使用它来监控应用程序并设置警报,以便通过电子邮件、Slack、Telegram 等方式接收通知。

PostgreSQL:生成 UUID 主键

通用唯一标识符 (UUID) 是一个 128 位的数字,其生成方式使其极不可能在已知宇宙中被其他人生成相同的标识符(全局唯一)。

在 PostgreSQL 中,您可以使用 uuid-ossp 扩展中的 uuid_generate_v4 函数生成 UUID。

Postgres UUID primary key

什么是 UUID?

UUID 代表通用唯一标识符。它是一个 128 位的标识符,用于在计算机系统和应用程序中唯一标识信息。UUID 通常表示为一个 36 个字符的字符串,通常采用类似 "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx" 的格式,其中每个 "x" 代表一个十六进制数字。

UUID 的目的是提供一种生成标识符的方法,这些标识符极不可能与其他标识符冲突,即使它们是在不同的系统或不同的时间创建的。这使得 UUID 在需要在分布式系统、数据库或其他应用程序中唯一标识对象、实体或资源的场景中特别有用。

何时使用 UUID?

当您需要生成全局唯一标识符而无需使用 ID 生成服务时,可以使用 UUID,例如,OpenTelemetry在新窗口中打开 使用 16 字节的标识符作为跟踪 ID。

通常,UUID 是通过获取 16 个随机字节生成的,其唯一性基于数量,而不是生成算法。此类标识符已被证明是唯一的,但比 64 位顺序数字更大,速度略慢。

提示

UUID 比 64 位顺序标识符略慢。仅当您没有简单的方法来生成更小的顺序标识符时才使用它们。

PostgreSQL 中的 UUID

PostgreSQL 需要一个扩展来支持 UUID 列类型。该扩展包含在 postgresql-contrib-* 包中

sudo apt install postgresql-contrib-14

然后,您需要在每个将要使用它的数据库中安装该扩展

CREATE EXTENSION IF NOT EXISTS "uuid-ossp";

Go 中的 UUID

要在 Go 中使用 UUID,您需要安装 google/uuid在新窗口中打开 包。

go get github.com/google/uuid

satori/go.uuid在新窗口中打开 也能正常工作,但它似乎不再维护了。

生成 UUID

在 PostgreSQL 中

SELECT uuid_generate_v4();

在 Go 中

import "github.com/google/uuid"

fmt.Println(uuid.New())

在模型中使用 UUID

您可以在 Bun 模型 中使用 uuid.UUID 类型,如下所示

import "github.com/google/uuid"

type Story struct {
	ID       uuid.UUID `bun:"type:uuid,default:uuid_generate_v4()"`
	Title    string
	AuthorID uuid.UUID `bun:"type:uuid"`
}

UUID 字段名称也适用

type Story struct {
	UUID       uuid.UUID `bun:",pk,type:uuid,default:uuid_generate_v4()"`
	Title      string
	AuthorUUID uuid.UUID `bun:"type:uuid"`
}

监控性能

监控 PostgreSQL在新窗口中打开,您可以使用 OpenTelemetry PostgreSQL在新窗口中打开 接收器,它随 OpenTelemetry 收集器一起提供。

OpenTelemetry 收集器在新窗口中打开 是一个宝贵的组件,用于在分布式环境中监控应用程序和基础设施。它能够高效地收集、处理和导出数据,以提高软件系统的可观察性、故障排除和性能。

Uptrace 是一个 开源 APM在新窗口中打开,用于 OpenTelemetry,它支持分布式跟踪、指标和日志。您可以使用它来监控应用程序并解决问题。

Uptrace Overview

Uptrace 带有一个直观的查询构建器、丰富的仪表板、警报规则、通知以及大多数语言和框架的集成。

Uptrace 可以在一台服务器上处理数十亿个跨度和指标,并允许您以 10 倍更低的成本监控您的应用程序。

您只需几分钟即可通过访问 云演示在新窗口中打开(无需登录)或使用 Docker在新窗口中打开 在本地运行它。源代码可在 GitHub在新窗口中打开 上获取。