多租户数据库架构(闭合)(multi-tenant database architecture [c

2019-07-18 21:05发布

我建立一个SaaS应用程序,我们正在讨论关于每个客户一个数据库VS共享数据库。 我也读了不少,在所以这里incluisve一些话题,但我还有很多疑点。

我们plataform应该是每一个客户高度定制。 (他们应该能够定制表格和自定义字段添加到现有表)。 在多个数据库的形式给出了在这种情况下似乎很大。

问题是。 应我的“用户”表在master数据库中或在每个客户端数据库? 用户可能有一个或多个组织,所以它会出现在多个数据库。 此外,什么样左右的国家表等通用表?

这是有道理的在master数据库中。 但是,我有其中有一个外键用户CREATED_BY领域的许多表。 也有通过客户端一些权限相关的表格。

我将失去外键,如果多个数据库,这意味着更多的数据库查询的力量。 我知道我可以使用数据库之间的交叉连接,如果他们是在同一个服务器,但后来我松散的可扩展性。 (我可能需要在未来的多个数据库服务器)。 我已经约因子评分联合表格。 不知道性能。

我使用的技术是PHP和symfony的2框架和MySQL数据库。

另外,恐怕关于维护这样的系统。 我们可以创造一些脚本来自动在所有数据库架构的变化,但如果我们有10K的客户,这将意味着10K的数据库。

你怎么看待这个opiniion? 我的应用程序的主要caracteristic应该是灵活因此,如果客户需要比基本plataform可是没有更具体的东西,它应该能够做到这一点他。

Answer 1:

这里的一些经典问题。 你曾经去过http://highscalability.com/ ? 一些好的案例研究那里。

从个人的经验,如果你尝试共享一台服务器上的客户端,你会发现一个非常成功的/活跃用户会占用机器的所有资源,随着时间的推移。 我们在摧毁了一个共享服务器SAAS有一个客户,我们不得不到别的地方打动他。

我会撕裂了全球枚举到服务。 你可以喜欢的事情的国家名单,州列表等一个中央数据库,并把它放在后面的Web服务层。 此外,在该数据库中可以有哪些服务器属于哪个用户等,你可以做一个管理门户,读取/写入到这个数据库来管理你的用户群的用户管理/管理。

如果我再次做SAAS,我会从小事做起,等待疼痛袭来。 你真正想要的是在发生的时候解决升级问题的好工具。 有一些脚本做准备跨服务器的滚动模式变化(没有办法避免这种情况,一旦你有一个以上的服务器)。 有脚本取下来的机器,而你是修改架构。 有脚本,将用户从一个共享服务器迁移到一个专用的一个。

考虑从一个中央数据库设置复制。 这将抽空每个用户分区/数据库需要您无需编写大量的代码全局信息。

但我见过的建议的最大的一块 - 和经验丰富的第一手 - 不要试图太辛苦建立下一个Facebook的规模。 从简单的开始,看看担心主要可扩展性问题之前,到底发生了什么。 随着用户群的扩大什么很好地进行扩展,什么没有你可能会惊讶。



文章来源: multi-tenant database architecture [closed]