我想知道在这种情况下是否
- 您获得的读取次数多于写入次数
- 您选择的 SQL 服务器便宜/免费,并提供快速的镜像/复制服务
- 你的数据库不是特别大
与其拥有单独的 SQL 服务器,不如在每台机器上都有一个 SQL 实例从主服务器获取即时更新。这样,在执行所有读取查询时不会有网络延迟,但由于 SQL 实例必须执行,因此会影响每台机器的性能。整体性能会更好吗?还有其他可能出现的优点/缺点吗?
我想知道在这种情况下是否
与其拥有单独的 SQL 服务器,不如在每台机器上都有一个 SQL 实例从主服务器获取即时更新。这样,在执行所有读取查询时不会有网络延迟,但由于 SQL 实例必须执行,因此会影响每台机器的性能。整体性能会更好吗?还有其他可能出现的优点/缺点吗?
您的 SQL Server 应该始终与网络服务器位于不同的盒子上,这是毫无疑问的。
您拥有多少数据库服务器和网络服务器,以及它们如何镜像(或以其他方式)取决于您如何扩展您的应用程序。
您在另一台机器上拥有 SQL Server,因为它需要(并且值得)大量 RAM。
拥有数据库的只读副本是一种非常常见的架构模式。我们接受它们有一定程度的陈旧性,也许它们甚至每天只更新一次。
一般规则是,多个副本会在操作和管理方面引入复杂性,并且往往会引入数据不一致的可能性——几乎不可避免地,副本不会是完美的一步(或者制作它们的成本太高) .)
一个例子:如果你的复制处理中断了会发生什么。这样一些,但不是所有的副本都会变得陈旧。现在,您的用户开始看到截然不同的世界观。这对你有多重要?如果它是一个低价值数据的网站(例如,在伦敦郊区的名人目击事件),那也许没问题。如果它是现有库存,并且过时意味着您的客户无法下订单,那么也许您更关心。
我的建议:当您在凌晨 3 点坐在手术室时,在纸上盒装的级别上听起来很简单的事情并不总是这样。确保您可以轻松操作您的解决方案。
一个直接的缺点是 SQL Server 中没有分布式锁协调器,因此您可能会遇到合并冲突,因为更新可以同时更改两个不同服务器上的同一行。
根据数据库的大小和 Web 服务器中的磁盘,您会发现您的网络延迟小于您将开始遭受的磁盘延迟,因为 Web 服务器磁盘的性能通常不如您提供给数据库。如果您想要这种性能,您将购买每个 Web 服务器。
复制性能也不是没有延迟,事务的分配不是“免费”的,必须计划仔细维护事务日志,以确保您没有得到日志碎片(事务日志中的 vlog 太多),这会杀死复制性能。