多租户:一个租户一个数据库有什么好处?

4
根据我所了解的,看起来SE网络上的每个站点都存在于单独的应用程序中,但有自己的数据库。这似乎很昂贵,而且我不确定好处在哪里。我的初学者理论是,由于每个数据库在每个表中的行数较少,因此整体上读写速度会稍微快一些。
这种好处似乎要付出巨大的代价,即跨数据库应用任何迁移或数据库更新更加耗时,并引入了冗余、DevOps等更高的成本。
相比之下,这种架构与单个数据库+单个应用程序的架构相比有什么好处呢?

你们的应用程序中需要管理多少个不同的“客户”?这只是出于兴趣问一下。 - David Atkinson
2个回答

4
将每个租户放在单独的数据库中,可以很容易地将高需求的租户移动到他们自己的服务器上,将其数据/日志文件放在更快的I/O上等等。如果将所有人都放在同一个数据库中,最终你会在当前硬件上遇到瓶颈,然后你要么会将所有人移动到更大的硬件上。
维护部分并不是真正的大问题,实际上有些事情变得更容易了。对于相同架构的部署,你不需要任何额外的DevOps资源,只需要一个循环(或类似SQL Farm CombineRed-Gate Multi Script的工具)。更容易的事情包括备份-虽然听起来像是更多的管理开销,并且你仍将拥有大约相同数量的总数据进行备份,但单独的数据库实际上允许你更好地控制-你可以将不同的备份放在不同的驱动器上,在不同的时间表上运行它们,它们应该更小更快,并且你甚至可以将不同的租户保留在不同的恢复模型上。另一个额外的奖励:由于一个租户的问题而恢复到某个时间点,只会影响该租户。
另一个好处是保持每个租户的数据分离 - 这有时满足法律要求,但也使得删除或将租户移动到不同服务器变得非常容易,而不会影响任何其他租户。
在dba.SE上的一些其他叙述:

https://dba.stackexchange.com/a/16767/1186

https://dba.stackexchange.com/a/33556/1186

这也是云解决方案设计中的一个重要方面,例如Windows Azure SQL Database。

3

这与任何扩大或分散决策类似。

如果您选择分散,您可以在更多硬件上分配工作负载,成本更低(通常如此)。就像您所提到的,较小的数据库也更容易优化读写。基本上,较小的数据库更易于维护和控制性能:索引更小,您不必担心像分区这样的高级设计问题,在恢复单个租户数据时,恢复速度更快,您不必担心代码错误会不当地暴露其他租户的数据等等。

像所有事物一样,必须考虑很多权衡。但是,避免多租户情况有非常明显的好处。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接