我们曾在发布了新的迁移引擎 Atlas。
使用 Atlas,向 Ent 添加新数据库支持再也前所未有地简单。
今天,我很高兴宣布,TiDB 的预览支持现已可用,使用已开启 Atlas 的最新版本 Ent。
Ent 可以访问多种类型的数据库,包括面向图形和关系型数据库。用户最常使用的标准开源关系型数据库包括 MySQL、MariaDB 和 PostgreSQL。随着基于 Ent 的应用程序团队越来越成功并需要处理更大规模的流量,这些单节点数据库经常成为扩展的瓶颈。因此,许多 Ent 社区成员请求对 NewSQL 数据库(如 TiDB)的支持。
TiDB
TiDB 是一个开源 NewSQL 数据库。它提供了传统数据库所不具备的许多功能,例如:
- 水平扩展 – 多年来,软件架构师需要在关系型数据库提供的熟悉性和保证与具备 NoSQL(如 MongoDB 或 Cassandra)水平扩展能力之间做出选择。TiDB 在保持良好兼容性方面支持 MySQL 功能的同时实现水平扩展。
- HTAP(混合事务/分析处理) – 此外,数据库传统上被划分为分析型(OLAP)和事务型(OLTP)数据库。TiDB 通过在同一数据库上同时支持分析和事务工作负载,打破了这种二元性。
- 预装监控(Prometheus+Grafana) – TiDB 从设计之初就以云原生模式构建,并原生支持 CNCF 标准可观测性栈。
欲了解更多信息,请查看官方的TiDB 介绍。
HiHello with TiDB
要使用 Ent+TiDB 快速创建“Hello World”应用,请按以下步骤操作:
通过 Docker 启动本地 TiDB 服务器:
docker run -p 4000:4000 pingcap/tidb现在你应该有一个在 4000 端口监听的 TiDB 实例。
克隆示例hello world 仓库:
git clone https://github.com/hedwigz/tidb-hello-world.git在此示例仓库中我们定义了一个简单的
User模式:ent/schema/user.gofunc (User) Fields() []ent.Field {
return []ent.Field{
field.Time("created_at").
Default(time.Now),
field.String("name"),
field.Int("age"),
}
}然后,我们将 Ent 与 TiDB 连接起来:
main.goclient, err := ent.Open("mysql", "root@tcp(localhost:4000)/test?parseTime=true")
if err != nil {
log.Fatalf("failed opening connection to tidb: %v", err)
}
defer client.Close()
// 使用 Atlas 运行自动迁移工具。
if err := client.Schema.Create(context.Background(), schema.WithAtlas(true)); err != nil {
log.Fatalf("failed printing schema changes: %v", err)
}注意,在行
1我们使用mysql方言连接到 TiDB 服务器。这是可能的,因为 TiDB 与 MySQL 兼容(MySQL 兼容性),且不需要任何特殊驱动。
说到这点,TiDB 与 MySQL 之间仍存在一些差异,尤其是在架构迁移、信息模式检查和迁移规划方面。因此,Atlas 会自动检测其连接的是否为 TiDB 并相应处理迁移。
另外,注意在行7我们使用schema.WithAtlas(true),这会提示 Ent 使用 Atlas 作为其迁移引擎。最后,我们创建一个用户并将记录保存到 TiDB,以便后续查询和打印:
main.goclient.User.Create().
SetAge(30).
SetName("hedwigz").
SaveX(context.Background())
user := client.User.Query().FirstX(context.Background())
fmt.Printf("用户:%s 的年龄是 %d 岁\n", user.Name, user.Age)运行示例程序:
$ go run main.go
用户:hedwigz 的年龄是 30 岁
Woohoo! 在这一次快速演示中我们完成了:
- 启动本地 TiDB 实例。
- 将 Ent 与 TiDB 连接。
- 使用 Atlas 迁移我们的 Ent 模式。
- 使用 Ent 向 TiDB 插入并查询数据。
预览支持
Atlas 与 TiDB 的集成已在 TiDB 版本 v5.4.0(撰写时为 latest)上经过充分测试,并将在未来继续扩展。
如果你使用的是其他版本的 TiDB 或需要帮助,请随时提交 Issue或加入我们的Discord 频道。
- 订阅我们的 简报
- 在 Twitter 上关注我们
- 在 Gophers Slack 的 #ent 频道加入我们(加入链接)
- 加入我们的 Ent Discord 服务器