先说说我的软件,我的软件是一个类似 ERP 类的软件。某个行业的erp。
因为订单和库存表可能会相当大(因为目前我已经有用户,单个大的用户库存库位都是上百万的,所以我不是在杞人忧天。)
我的想法是,将某些用户的订单数据、库存数据根据配置放在某一个库。
比如
用户A、B、C 我放在了 数据库A
当某天,来了新用户D,我发现ABC三个人的订单量和库存量太大了,新用户D来了以后,我为它重新配置了一个数据库B。(我不选择一个用户一个库是因为,我怕小用户一多,每个小用户一个库,成本太高,我希望的是酌情处理。)
如此往复。
我将 用户 A B C D 他们的数据库配置信息以及其他公共信息,比如用户的账号密码等写在同一个库S作为公共库。
也就是说,假设用户创建销售单,我的web api提供了创建销售单的api,他提交请求过来后,我先去公共库拿他的数据库连接字符串的信息,再去实例化操作类,再去操作他的订单表。
根据我目前自己能想到的,感觉这样子的设计好像不会有什么问题。我这样子做,主要是为了能让数据库更容易水平拓展,再配合统一网关,在网关处做负载。
像这样子设计,会出现哪些比较棘手的问题吗?因为我之前的都是单库,所以我怕我想得不够,请各位介绍一下经验,谢谢。
业内一般都是怎么样一个设计呢?
分表也会有sql使用上的限制,分库的话在多数据源并发请求时,磁盘io会很高,可以试试单数据源内多数据库
我感觉你的方案可行,如果分库后,多库表结构同步需要考虑。多库也需要进行管理。
嗯。假设动一个表结构,就需要把所有库给改动,管理上可能是会需要某种保证同步的机制。
当前情况下我应该还不需要多很多库。
其他不知道还会不会存在我没想全的问题。
@LoveCoder: 如果库不多的话,做好变更记录手动弄吧。以后多了得考虑工具。
如果变更频繁,上工具吧(也可以自己写)。
最近刚看的一篇 分库分表文章:https://mp.weixin.qq.com/s/FP9XcZOnXmEOyUmCKnVoEw
我现在的项目,第二也阶段也是要分库分表, 大概思路就是:
主库
租户信息管理,
配制分库分表信息,
公共的一些配制信息
业务库
租户业务表:一个租户一套表
最后实现可以把优质客户特殊处理
业务量大的可以抽出来 单独一个库
业务量少的,可以抽出来合并在一个库
免费客户统一放到一个库,当然每租户都是独主的一套表
这样也能支持独立部署
笔者也在做多租户产品。
在设计多租户SaaS应用时,您必须谨慎地选择最适合您应用程序需求的租户模型。租户模型决定了每个租户的数据如何映射到存储。您选择的租户模型会影响应用的设计和管理。如果前期没有选择合适,以后再切换到另一个模型有时代价昂贵。
详细请参考:《多租户SaaS数据库租赁模式》
你这种情况分表就够了吧,感觉没必要分库了。 分库一般是因为内存和cpu支撑不起来做负载均衡,如果仅仅是数据量大,分表,加磁盘就够了。
– 。淑女范erり 4年前@。淑女范erり: 为什么分表更好?
– LoveCoder 4年前@LoveCoder: 简单一些,开销也小一些,如果分表满足,就不必要搞分库,分库毕竟是完整的一套系统,而且程序上也要处理多个数据源。
– 。淑女范erり 4年前