0

有没有人有过以多读单写方式扩展 SQL Server 的经验。如果没有,任何人都可以建议他们有经验的阅读密集型 Web 应用程序的合适替代方案

4

3 回答 3

2

这可能取决于两件事:

  1. 每次写入有多大?
  2. 读者需要实时数据吗?

写入时会阻塞读者,但如果每次写入小而快,那么读者就不会注意到。

例如,如果您卸载日终报告,那么您可以将负载分批到单独的服务器上,因为阅读器不需要实时数据。这是有道理的

您的主服务器上的写入必须同步到您的卸载辅助服务器......无论如何这将作为同步过程的一部分阻塞在那里+您添加了开销负载来管理同步。

大多数应用程序的阅读率一直在 95% 以上。例如,更新或删除是先读后写。

我的选择是(可能基于低写入量并且它是一个 Web 应用程序)在数据库服务器中扩展填充尽可能多的 RAM,并为数据库的数据和日志文件使用单独的磁盘路径。

于 2008-12-17T05:04:33.223 回答
1

对于您的方案,我没有任何横向扩展 SQL Server 的经验。但是,对于读取密集型应用程序,我会考虑减少数据库的负载并使用诸如MemcacheMS Velocity之类的缓存策略

我知道有两种方法:

  1. 将整个数据库加载到缓存中并管理缓存中项目的添加和更新。

  2. 仅在请求时将项目添加到缓存中,并在执行写入操作时将其删除。

于 2008-12-16T23:09:04.500 回答
1

某种复制可以解决问题。
http://msdn.microsoft.com/en-us/library/ms151827.aspx

您当然需要更改您的应用程序代码。

有些人使用分区表,将不同的行范围存储在不同的服务器上 - 与视图结合。这对应用程序是不可见的。对于这种做法,我认为是联合会。

通过设计您的数据库、应用程序和服务器配置(SQL 细节 - 数据/日志/系统/sql 二进制文件/tempdb 的位置),您应该能够处理相当不错的负载。如果没有必要,尽量不要使事情复杂化。

于 2008-12-17T03:49:26.637 回答