为了提升网站的性能,我们可以采用数据库读写分离的方案。在WTM框架中,只需要简单配置即可完成数据库读写分离操作。官方文档
一、环境搭建
我们这里在本地用VMwareWorkstation建立了2台WindowsServer服务器,每台服务器都安装SqlServer开发版数据库。由于本人电脑只有8G内存,安装2个虚拟机已经非常卡了。
二、主机、虚拟机通讯
1、确定主机与虚拟机通讯是否正常。本人采用的是NAT连接方式,主机直接ping虚拟机ip是畅通的。如果不通,详细参照。
2、将2台服务器的TCP连接打开,详细参照。设置完成之后,直接用本地计算机安装的SSMS连接虚拟机中的SqlServer实例。确定2个实例都能正常连接。
三、配置WTM项目
在WTM生成项目,并下载。项目appsettings.json,将数据库连接字符串修改为使用账号密码登录。设置完成后启动项目,并查看Node1(192.168.137.128)数据库是否正常生成数据表。
{"Key": "default","Value": "Server=192.168.137.128;Database=GasDataReport_db;User ID=sa;Password=000000;"},
四、配置数据库主从
在Node1(192.168.137.128)发布订阅【数据库名称GasDataReport_db】,在Node2(192.168.137.129)接收订阅【数据库名称zcfl】。完成数据库主从设置。关于这一块,详细参照。
后续会写一篇关于alwayson的博客。
五、配置WTM读写分离
修改项目appsettings.json,将数据库连接字符串修改为读写分离模式。
框架会自动识别ConnectionString中以下划线+数字结尾的key值,作为只读库。
配置文件定义了两个连接字符串,default是写库,default_1是只读库。
"ConnectionStrings": [{"Key": "default","Value": "Server=192.168.137.128;Database=GasDataReport_db;User ID=sa;Password=000000;"},{"Key": "default_1","Value": "Server=192.168.137.129;Database=zxcl;User ID=sa;Password=000000;"}],
六、验证是否读写分离。
框架读写分离逻辑是,就是[HttpPost]的会走写库,其他走读库,另外可以通过[FixConnection]指定用读库还是写库。
在HomeController里添加Test方法,并在数据完成搜索的地方打断点。
public async Task<IActionResult> Test(){var list = await DC.Set<FrameworkUserBase>().ToListAsync();return Json(list);//此处打断点}
进入系统后访问Test方法。/Home/Test 进入断点
在即时窗口中输入this.DC回车查看数据库连接信息。
这里我们可以看到,获取数据的Sqlserver实例是Node2(192.168.137.129),zxfl数据库。
成功完成读写分离配置。