我见过SaaS应用程序以多种不同的方式托管.跨多个数据库拆分功能和模块是一个好主意吗?例如,将User表放在一个DB上,将功能/ app特定表放在另一个DB上,也可能放在另一个DB中的其他常用共享表中?
从一个数据库开始.在项目需要时拆分数据/功能.
以下是我们可以从LinkedIn学到的东西:
单个数据库不起作用
不可能有参照完整性
任何数据丢失都是一个问题
缓存即使在适度有效的情况下仍然很好
永远不要低估增长轨迹
资源:
LinkedIn架构
LinkedIn通信架构
高可伸缩性是一个用于扩展SaaS应用程序的好博客.如前所述,按照您的建议在数据库之间拆分表通常是个坏主意.但类似的概念是分片,您可以保留相同(或类似)的架构,但将数据拆分到多个服务器上.例如,用户1-5000在server1上,用户5000-10000在server2上.根据应用程序使用的查询,它可以是一种有效的扩展方式.
对于SaaS应用程序,您可以为多个租户使用多个数据库,但通常不会按模块方式对其进行拆分.
这是我在SaaS应用程序设计中看到的最常见的模型.将为添加到应用程序的每个租户复制基础架构.