mysql - 微服务中心化数据库模型

标签 mysql database go microservices

目前我们有一些microservice ,他们有自己的数据库模型和 GORM Golang 包提供的迁移。我们有一个很大的旧 MySQL 数据库,这违反了微服务法,但我们无法取代它。恐怕当微服务数量开始增长时,我们将迷失在众多数据库模型中。当我在微服务中添加一个新列时,我只需在终端中键入 service migrate(因为有一个用于运行和迁移命令的 cli),它会刷新数据库。

管理它的最佳实践是什么。例如我有 1000 个微服务,当有人刷新模型时,没有人会输入 service migrate。我在考虑一个集中式数据库服务,我们只需添加一个新列,它将存储所有模型和所有迁移。唯一的问题是服务如何了解数据库模型的变化。这就是我们在服务中存储用户的方式:

type User struct {
    ID        uint           `gorm:"column:id;not null" sql:"AUTO_INCREMENT"`
    Name      string         `gorm:"column:name;not null" sql:"type:varchar(100)"`
    Username  sql.NullString `gorm:"column:username;not null" sql:"type:varchar(255)"`
}

func (u *User) TableName() string {
    return "users"
}

最佳答案

根据您的用例,MySQL Cluster可能是一个选择。 Two phase commits MySQL Cluster 使用使频繁写入变得不切实际,但如果写入性能不是大问题,那么我希望 MySQL Cluster 比连接池或排队 hacks 更好。当然值得考虑。

关于mysql - 微服务中心化数据库模型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41850142/

相关文章:

database - 如何在 Erlang Mnesia 中生成 AUTO INCREMENT Id

elasticsearch - 将日志从 Kafka 发送到 Elasticsearch 的最快方法

windows - 在 Windows 上优雅地终止进程

json - 如何告诉 json.Unmarshal 使用结构而不是接口(interface)

mysql - 如何从 2 个表中删除特定 "Customer"的所有痕迹? MySQL

PHP MySQL 选择脚本

sql - 如何在 jira (db) 的时间间隔内找到添加到项目版本的所有问题?

mysql - 在mysql表中查找非ascii空格

mysql utf8 土耳其语字符无法正确识别

sql-server - SQL Server 的基本查询