读写分离:主库负责增删改查,从库负责查询,
需要注意的是,从库任何增删改不会影响到主库
事务复制:
准备工作:
l 环境:Microsoft SQL Server 2014版本
l 开启服务:Sql Server服务、SqlServer代理服务
l 数据库:生成数据库服务器,数据库:RuanmouData
l 如果需要跨服务器复制:需要指定服务器之间在同一个域中
l 设置数据库连接地址为服务器名称
配置步骤:
1、 设置共享文件夹(如果是多服务器,需要设置共享在主数据库服务器上)
2、在 SQL Server Management Studio中连接到发布服务器,然后展开服务器节点。
3、右键单击“复制” 文件夹,然后单击“配置分发”
4、上分发服务器上页上,选择 ' <服务器名 > ' 将充当自己的分发服务器;SQL Server 将创建分发数据库和日志,然后单击下一步。
5、如果 SQL Server 未运行,则在 SQL Server“代理启动” 页上,选择“是” SQL Server,将 代理服务配置为自动启动。 单击“下一步” 。
6、在“快照文件夹” 文本框中,输入 “共享文件夹的名称”,然后单击“下一步” 。接受向导剩余页上的默认值。
7、单击“完成” 以启用分发。
发布:
1、在 SQL Server Management Studio中连接到发布服务器,然后展开服务器节点。展开“复制”文件夹,右键单击“本地发布”文件夹,再单击“新建发布”。
2、在“发布数据库”页上,选择需要发布的数据库,然后单击“下一步” 。
3、在“发布类型”页上,选择“事务发布” ,然后单击“下一步” 。
4、选择需要发布的对象。
5、设置代理安全性,选择默认账号。
6、可以查看快照的状态。
创建订阅
1、在 SQL Server Management Studio 中连接到发布服务器,然后依次展开服务器节点和“复制” 文件夹,在“本地本地” 文件夹中,然后单击“新建订阅”新建订阅向导将启动。
2、在“发布”页上,选择 上面数据库的发布,然后单击“下一步” 。
3、在“分发代理位置”页上,选择“在分发服务器上运行所有代理” ,然后单击“下一步” 。
4、在“订阅服务器”页上,如果未显示订阅服务器实例名称,请单击“添加订阅服务器” ,然后单击“添加 SQL Server 订阅服务器” ,在“连接到服务器” 对话框中输入订阅服务器实例名称,然后单击“连接” 。
5、在中分发代理安全性对话框框中,单击省略号 ( ... ) 按钮,设置账户,单击确定,然后单击下一步。单击“完成” 以接受其余页中的默认值并完成向导。
注:
如果再新增复制分发的时候,提示数据库服务器名称问题:按照一下步骤操作
use master go select @@servername; select serverproperty('servername') 检查名称--改名字就会失败 sp_dropserver 'old_server_name' sp_addserver 'current_computer_name','local' 然后在SQL Server配置管理器 重启Sql服务
注:如果出现发布的状态提示代理服务器无法访问路径(路径拒绝访问),可以按照一下方式解决:
第一步:
第二步:
第三步:
负载均衡
做好了读写分离之后,我们可以在c#代码中配置访问策略(写一个简单平均访问算法就OK),来平均访问从库
分库分表
数据库分库之垂直切分
比如一个电商平台里面 所有订单/物流/财务/仓储都在一个数据库 此时可以每个系统一个数据库服务器
数据库分库之水平切分
如果一个表存储数据很多,导致数据库性能问题,可以水平分库,数据库结构完全一致,只是存储数据不一样(可以通过时间/区域)来执行分库策略
一定要注意的是:分库的一定要符合实际需求进行拆分,否则会造成比没分更严重的后果
垂直分表:某些字段的数据不常用,但是又包含在这张表中,而且这些字段很损耗性能;就可以进行垂直切分,两个表可以直接通过两个主键关联(建议使用Guid作为主键);也可以通过主外键关系来关联!
水平分表:
例子:银行账单表 如果要进行分表的话,就是使用时间来进行策略划分,因为一般就是查询近一个月或者半年之内的
外卖系统:通过区域来分表