mysql 多租户_mysql – 多租户数据库设计 – 每个用户的数据库

我正在开发一个Web应用程序,它要求用户拥有自己的一组私有数据.我最初的计划是创建一个商店表,一个用户表和一个user_stores交叉表.然后,我会在stores表中保存该存储的数据库名称(并使用应用程序用户和密码创建每个特定于商店的数据库,以便Web应用程序始终可以登录).

每个商店都有类似的数据(用户,产品,运输方法等),我知道我可以使用外键引用将所有内容绑定在一个巨大的数据库中.但是,由于数据是非常具体的并且可能是专有的,使用我的原始设计或者在其中创建包含每个人数据的单个数据库会更好吗?

我正在考虑扩展问题,单独的数据库会更好,因为我们可以将更活跃的帐户放在他们自己(或更强大的)数据库服务器上,如果需要,只需在stores表中添加服务器位置字段.此外,它可能更安全,因为我们可以将用户登录信息添加到数据库,只允许他们访问他们的数据(阻止一个用户编辑其他用户的东西).我的问题是,是否有我担心的问题?几乎每一篇我读过的帖子都说没有使用我想到的方法,而且我不是DBA.任何输入都会有所帮助.

附加信息:

这将托管在我将具有root访问权限的专用服务器上.我可以根据需要创建尽可能多的MySQL数据库.

解决方法:

我肯定会使用一个数据库.使用以下内容开始.使用单个数据库有几个原因,但最重要的原因是为了避免维护噩梦.如果你必须改变架构,那么你手上就会弄得一团糟.

标签:mysql,database-design,multi-tenant

来源: https://codeday.me/bug/20190718/1493267.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
在 Golang 中使用 GORM 实现多租户,可以通过创建多个数据库连接来实现,每个租户对应一个数据库连接。下面是一个简单的示例: 首先,需要安装 GORM: ```bash go get -u gorm.io/gorm ``` 然后,可以创建一个 `Tenant` 结构体来表示租户信息: ```go type Tenant struct { ID uint Name string // 其他租户信息 } ``` 接下来,可以创建一个 `DB` 结构体来表示数据库连接: ```go import "gorm.io/gorm" type DB struct { gorm.DB Tenant *Tenant } ``` 在 `DB` 结构体中,我们包含了一个 `Tenant` 指针,用于表示当前连接的租户信息。 接着,可以创建一个 `TenantQuery` 结构体来表示租户查询信息: ```go type TenantQuery struct { Name string // 其他查询条件 } ``` 然后,可以创建一个 `NewDB` 函数来创建一个 `DB` 实例: ```go import ( "gorm.io/driver/mysql" "gorm.io/gorm" ) func NewDB(tenant *Tenant) (*DB, error) { // 创建数据库连接 db, err := gorm.Open(mysql.Open("user:password@tcp(host:port)/database"), &gorm.Config{}) if err != nil { return nil, err } // 设置租户信息 if tenant != nil { db = db.Table(tenant.Name) } return &DB{ DB: *db, Tenant: tenant, }, nil } ``` 在 `NewDB` 函数中,我们首先创建了数据库连接,然后根据传入的租户信息设置表名,并将租户信息保存到 `DB` 结构体中。 最后,可以创建一个 `GetDB` 函数来获取当前租户的数据库连接: ```go func GetDB(ctx context.Context) (*DB, error) { // 从上下文中获取租户信息 tenant := GetTenantFromContext(ctx) // 从缓存中获取数据库连接 db, ok := GetDBFromCache(tenant) if !ok { // 如果缓存中不存在,则创建一个新的数据库连接 db, err := NewDB(tenant) if err != nil { return nil, err } // 将数据库连接保存到缓存中 AddDBToCache(tenant, db) } return db, nil } ``` 在 `GetDB` 函数中,我们首先从上下文中获取租户信息,然后从缓存中获取对应的数据库连接。如果缓存中不存在,则创建一个新的数据库连接,并将其保存到缓存中。 以上就是一个简单的使用 GORM 实现多租户的示例。需要注意的是,这只是一个基础的实现方式,实际应用中需要根据具体场景进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值