有没有人有过以多读单写方式扩展 SQL Server 的经验。如果没有,任何人都可以建议他们有经验的阅读密集型 Web 应用程序的合适替代方案
3 回答
这可能取决于两件事:
- 每次写入有多大?
- 读者需要实时数据吗?
写入时会阻塞读者,但如果每次写入小而快,那么读者就不会注意到。
例如,如果您卸载日终报告,那么您可以将负载分批到单独的服务器上,因为阅读器不需要实时数据。这是有道理的
您的主服务器上的写入必须同步到您的卸载辅助服务器......无论如何这将作为同步过程的一部分阻塞在那里+您添加了开销负载来管理同步。
大多数应用程序的阅读率一直在 95% 以上。例如,更新或删除是先读后写。
我的选择是(可能基于低写入量并且它是一个 Web 应用程序)在数据库服务器中扩展并填充尽可能多的 RAM,并为数据库的数据和日志文件使用单独的磁盘路径。
对于您的方案,我没有任何横向扩展 SQL Server 的经验。但是,对于读取密集型应用程序,我会考虑减少数据库的负载并使用诸如Memcache或MS Velocity之类的缓存策略
我知道有两种方法:
将整个数据库加载到缓存中并管理缓存中项目的添加和更新。
仅在请求时将项目添加到缓存中,并在执行写入操作时将其删除。
某种复制可以解决问题。
http://msdn.microsoft.com/en-us/library/ms151827.aspx
您当然需要更改您的应用程序代码。
有些人使用分区表,将不同的行范围存储在不同的服务器上 - 与视图结合。这对应用程序是不可见的。对于这种做法,我认为是联合会。
通过设计您的数据库、应用程序和服务器配置(SQL 细节 - 数据/日志/系统/sql 二进制文件/tempdb 的位置),您应该能够处理相当不错的负载。如果没有必要,尽量不要使事情复杂化。