从我读过的内容看来,似乎是each site on the SE network lives in a single app, but has its own database。这看起来很昂贵,而且我不确定它的好处是什么。我的新手理论是,由于每个数据库在每个表中的行数较少,因此读取和写入的速度会快一些。
这种好处来自于跨数据库应用任何迁移或数据库更新这些看似巨大的成本,这更耗时,并且会带来更高的冗余,DevOps等成本。
这比单数据库+单一应用程序架构有什么好处?
答案 0 :(得分:3)
它类似于任何向上扩展与向外扩展决策。
如果您扩展,您可以以更低的成本(通常)在更多硬件上分配工作负载。正如您所提到的,读取和写入也更容易在较小的数据库上进行优化。基本上,在较小的数据库上维护和控制性能更容易:索引更小,您不必担心分区等高级设计问题,如果您必须恢复单个租户的数据,则恢复速度更快,您不需要必须担心代码错误,不正当地暴露其他租户的数据等。
正如你所提到的那样,在所有事情中都需要考虑大量的权衡。但是,避免多租户情况有很明显的好处。
答案 1 :(得分:3)
将每个租户保存在一个单独的数据库中,可以很容易地将要求很高的租户移动到他们自己的服务器上,将他们的数据/日志文件放在更快的I / O上等等。如果你把每个人放在同一个数据库中,你就可以了“最终会在当前的硬件上碰到一堵墙,然后你要么将所有人都搬到更大的硬件上。”
维护部分并不是什么大不了的事,实际上使一些事情变得更容易。对于部署到相同模式,您实际上不需要任何其他DevOps资源,只需要一个循环(或SQL Farm Combine或Red-Gate Multi Script之类的工具)。更简单的事情是备份 - 虽然听起来更多的管理开销,并且您仍然需要大约相同数量的整体数据备份,但是单独的数据库实际上允许您更好地控制 - 您可以在不同的驱动器上放置不同的备份,按不同的时间表运行它们,它们应该更小更快,甚至可以在不同的恢复模型上保留不同的租户。一个额外的好处:由于一个租户的问题而恢复到一个时间点只影响该租户。
另一个好处是保持每个租户的数据分开 - 有时满足法律要求,但也可以很容易地删除租户或将其移动到不同的服务器而不影响任何其他租户。
关于dba.SE的这些答案中的其他一些叙述:
https://dba.stackexchange.com/a/16767/1186
https://dba.stackexchange.com/a/33556/1186
这也是基于云的解决方案(如Windows Azure SQL数据库)设计的一个重要方面。