V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
MySQL 5.5 Community Server
MySQL 5.6 Community Server
Percona Configuration Wizard
XtraBackup 搭建主从复制
Great Sites on MySQL
Percona
MySQL Performance Blog
Severalnines
推荐管理工具
Sequel Pro
phpMyAdmin
推荐书目
MySQL Cookbook
MySQL 相关项目
MariaDB
Drizzle
参考文档
http://mysql-python.sourceforge.net/MySQLdb.html
adminisqq
V2EX  ›  MySQL

多数据库 同步字段的问题

  •  
  •   adminisqq · 2020-03-22 22:20:51 +08:00 · 3097 次点击
    这是一个创建于 1712 天前的主题,其中的信息可能已经有所发展或是发生改变。

    SAAS 业务模式,每一个客户就生成一套 账号密码、数据库(同一个 RDS 实例)

    目前一个 RDS 有 270+个 数据库

    目前是 挨个链接到数据库,在执行 DDL 操作,如果一个库操作时间 要 1 秒钟,就要 270+ 秒,后期数据库数量还会不断的增加

    问题 1:同步时间久,将来会上千个、上万个库

    问题 2:其他产品线在同步字段的时候,有很多遗漏,导致每个库的字段不统一

    有比较成熟的解决方案么?

    看了下 阿里云的 DTS 目前还没搞明白


    目前 RDS 库结构

    企业库 1 个

    corp (包含所有的 用户信息,部门信息)

    业务库 270+ 个

    saas_user_1 saas_user_2 saas_user_3 saas_user_...

    第 1 条附言  ·  2020-03-28 04:18:25 +08:00
    最后改成了单库应用。经过一周的开发、重构、测试、灰度,今天终于上线了。
    9 条回复    2020-03-23 14:47:00 +08:00
    Hellert
        1
    Hellert  
       2020-03-22 22:32:31 +08:00 via Android
    典型的多租户模式。

    如果用户量比较大,还是 tenant_id 模式比较灵活,这样可以一户一库,也可以多户一库,可自由配置。缺点就是程序改动比较大,另外就是数据安全性。
    adminisqq
        2
    adminisqq  
    OP
       2020-03-22 22:41:39 +08:00
    @Hellert #1 各有优缺点吧;目前主流的 3 种,目前使用的第二种。

    独立数据库:每个租户一个数据库。

    优点:为不同的租户提供独立的数据库,有助于简化数据模型的扩展设计,满足不同租户的独特需求;如果 出现故障,恢复数据比较简单。
    缺点: 增多了数据库的安装数量,随之带来维护成本和购置成本的增加


    共享数据库、独立 Schema:即多个或所有的租户使用同一个数据库服务(如常见的 ORACLE 或 MYSQL 数据库), 但是每个租户一个 Schema 。

    优点: 为安全性要求较高的租户提供了一定程度的逻辑数据隔离,并不是完全隔离;每个数据库可支持更多 的租户数量。
    缺点: 如果出现故障,数据恢复比较困难,因为恢复数据库将牵涉到其他租户的数据; 如果需要跨租户统计 数据,存在一定困难。

    共享数据库、共享数据表:即租户共享同一个 Database,同一套数据库表(所有租户的数据都存放在一个数据库 的同一套表中)。在表中增加租户 ID 等租户标志字段,表明该记录是属于哪个租户的。

    优点:所有租户使用同一套数据库,所以成本低廉。
    缺点:隔离级别低,安全性低,需要在设计开发时加大对安全的开发量,数据备份和恢复困难。
    123444a
        3
    123444a  
       2020-03-22 22:50:02 +08:00 via Android
    你们业务经常加字段的,惊! dba 是干什么去了!再惊!一般扩展字段是 mediumblob, 这个是 protobuf,你要加几千个字段都不用改数据库
    wangyzj
        4
    wangyzj  
       2020-03-22 22:55:58 +08:00
    惊!
    一挂全挂吗?
    adminisqq
        5
    adminisqq  
    OP
       2020-03-22 22:57:42 +08:00
    @123444a #3 版本升级咯
    Hellert
        6
    Hellert  
       2020-03-22 22:59:44 +08:00 via Android
    @adminisqq
    "将来会上千个、上万个库",如果真是这样,趁早改成支持多户一库
    laball
        7
    laball  
       2020-03-23 00:10:53 +08:00
    1 、完全一个租户一个数据库的模式,可能是一个坑,建议支持多个租户一个库的模式;
    2 、各个产品加字段的问题,需要考虑,是不是每个库 Schema 都一致,如果一致,各个产品对于数据库的结构变更,需要串行化,并行会有各种坑,找 DBA 写个工具,同时将新脚本发布到各个库上执行,不是太难;如果 Schema 不完全一致,对于开发来说,就是个巨坑,可以考虑使用列式数据库,如 Cassandra ;
    xcstream
        8
    xcstream  
       2020-03-23 11:26:37 +08:00
    1 多用户 1 库
    2 字段整合
    abcbuzhiming
        9
    abcbuzhiming  
       2020-03-23 14:47:00 +08:00
    如果业务很稳定,每个用户都是使用相同的业务,那么建议多用户使用 1 个库
    如果业务不稳定,用户和用户之间的业务模型有明显区别,那么库必须分开,此时应开发专门工具来同步字段并检查同步效果
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2771 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 22ms · UTC 15:40 · PVG 23:40 · LAX 07:40 · JFK 10:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.