电商总结(三)构建数据库的主从架构

  这段时间,一直在总结电商系统的相关基础技术和架构,写了很多东西。但是还是发现一个很重要,很基础的方面没有讲到,那就是数据库读写分离的主从架构。可能发展到大型成熟的公司之后,主从架构已经落伍了,取而代之的是更加复杂的数据库集群。但是作为一个小型电商公司,数据库的主从架构应该是最基础的。任何大型的系统架构,都是不断演进的。主从架构便是数据库架构中,最基础的架构。所以研究完主从架构,也就能看懂更加复杂的架构了。

  首先为什么要读写分离?

  对于一个小型网站,可能单台数据库服务器就能满足需求,但是在一些大型的网站或者应用中,单台的数据库服务器可能难以支撑大的访问压力,升级服务器性能,成本又太高,必须要横向扩展。还有就是,单库的话,读、写都是操作一个数据库,数据多了之后,对数据库的读、写性能就会有很大影响。同时对于数据安全性,和系统的稳定性,也是挑战。

  数据库的读写分离的好处?

    1. 将读操作和写操作分离到不同的数据库上,避免主服务器出现性能瓶颈;

    2. 主服务器进行写操作时,不影响查询应用服务器的查询性能,降低阻塞,提高并发;

    3. 数据拥有多个容灾副本,提高数据安全性,同时当主服务器故障时,可立即切换到其他服务器,提高系统可用性;

  读写分离的基本原理就是让主数据库处理事务性增、改、删操作(INSERT、UPDATE、DELETE)操作,而从数据库处理SELECT查询操作。数据库复制被用来把事务性操作导致的变更同步到其他从数据库。以SQL为例,主库负责写数据、读数据。读库仅负责读数据。每次有写库操作,同步更新到读库。写库就一个,读库可以有多个,采用日志同步的方式实现主库和多个读库的数据同步。

  一:Sql Server 读写分离的配置

    SQL Server 提供了三种技术,可以用于主从架构之间的数据同步的实现:日志传送、事务复制和SQL 2012 中新增的功能Always On 技术。各自优劣,具体的大家自己去百度吧,这里提供一个以日志传送方式的数据同步,地址

  二:C# 数据库读写操作

    C#的请求数据库操作,单数据库和主从架构的数据库还是不一样的。主从架构的数据库,为了保证数据一致性,一般主库可读可写,从库只负责读,不负责写入。所以,实际C#在请求数据库的时候,还是要区别对待。

    1. 最简单的就是:配置两个数据库连接,然后在各个数据库调用的位置,区分读写请求相应的数据库服务器,如下图

    

    2. 第二种解决方案就是判断SQL语句是写语句(insert 、update、Create、 Alter)还是读语句(Select)。demo 下载 (PS:此demo为本人总结,跟实际生产中的DLL 不太相同,但是原理是一样的,大家字节总结封装吧。)

      /// <summary>
        /// 根据数据库的语句,选择相应的DB
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="commandType"></param>
        /// <returns></returns>
        public static DB SelectDB(string sql, CommandType commandType)
        {
            bool redirect2WritableDB = false;

            sql = sql.Trim().TrimStart(‘\r‘).TrimStart(‘\n‘);
            if (sql.IndexOf("UPDATE", StringComparison.OrdinalIgnoreCase) >= 0)
                redirect2WritableDB = true;
            if (sql.IndexOf("DELETE", StringComparison.OrdinalIgnoreCase) >= 0)
                redirect2WritableDB = true;
            if (sql.IndexOf("INSERT", StringComparison.OrdinalIgnoreCase) >= 0)
                redirect2WritableDB = true;
            if (sql.IndexOf("CREATE", StringComparison.OrdinalIgnoreCase) >= 0)
                redirect2WritableDB = true;
            if (sql.IndexOf("ALTER", StringComparison.OrdinalIgnoreCase) >= 0)
                redirect2WritableDB = true;

            //// 如果是存储过程,则默认是取Writable DB。
            if (redirect2WritableDB || commandType == CommandType.StoredProcedure)
            {
                return DBConfiguration.WritableDB;
            }
            else
            {
                int random = GenerateRandomNumber();
                int dbIndex = random % DBConfiguration.ReadDBs.Count;
                return DBConfiguration.ReadDBs[dbIndex];
            }
        }

    同时,增加相关的数据库配置

<?xml version="1.0" encoding="utf-8" ?>
<ConnectionString>
  <WritableDB>Data Source=192.168.99.242; Initial Catalog=DBTest; Uid=sa;pwd=test123; MultipleActiveResultSets=True</WritableDB>
  <ReadDBs>
    <DB>Data Source=192.168.99.241; Initial Catalog=DBTest; Uid=sa;pwd=test123; MultipleActiveResultSets=True</DB>
  </ReadDBs>
</ConnectionString>
时间: 2025-01-09 12:04:16

电商总结(三)构建数据库的主从架构的相关文章

Java高级电商项目-1.构建数据库,搭建项目环境

目录 到Github获取源码请点击此处 一. 数据库还原 二. Mybatis逆向生成工具的使用 三. 搭建项目环境 四. 在linux虚拟机上部署zookeeper, 搭建Dubbo服务. linux虚拟机安装JDK 安装zookeeper 五. 搭建ashop-manager-web项目 六. 数据库表分析 到Github获取源码请点击此处 ? 一. 数据库还原 新建Mysql数据库, 你可以使用自己熟悉的Mysql图形界面操作工具快速建库. ? 在新创建的ashop数据库中执行脚本文件as

真空镀膜材料网话聊钢界电商的三种类型

据真空镀膜材料网最近的观察,钢铁交易的网上平台大致可以分为三种,刻章机网在这里把他们简单的定义为挂羊头卖狗肉型.自食其力型.拓展业务型. 挂羊头卖狗肉型.从事钢铁行业的人员上网时可能经常会上一些钢铁资讯类的网站,去那里看一下当前的钢铁行业态势和行业新闻,但是近几年来,不知道大家有没有发现,越来越多的资讯类的网站开始了他们的商业之旅,有的是给自己的咨询设置权限,只有开通会员才可以浏览:还有的是设置了钢铁交易的模块,改变了最初的资讯类平台,转而做起了销售. 自食其力型.这种类型大多是一些大中型的钢铁

《亿级流量电商详情页系统实战:缓存架构+高可用服务架构+微服务架构》

视频教程:http://www.roncoo.com/course/view/af7d501667fe4a19a60e9467e6d2b3d9 升级说明: 该课程原本是123节课时,已于2017年7月份全部更新完毕.在原有123节课时的基础上,再免费新增70到80节左右的内容(注:课程大纲可能会做进一步优化,具体以最终更新为准),课程名将变更为<亿级流量电商详情页系统实战(第二版):缓存架构+高可用服务架构+微服务架构>简称第二版.本次免费新增内容将会从9月中旬开始更新,一直到10月底更新完毕

30、生鲜电商平台-电商促销业务分析设计与系统架构

说明:Java开源生鲜电商平台-电商促销业务分析设计与系统架构,列举的是常见的促销场景与源代码下载 左侧为享受促销的资格,常见为这三种: 首单 大于或等于某个会员级别 特定会员组:比如女性,月消费满1000等等,都是通过查询条件查询出来的特定分组. 优惠类型,对于电商网站主要是下面4类: 金额 赠品:商品.优惠券.现金券.积分等 包邮(实际上也是钱) 其它:如送精美包装等. 对于其它业务类型的平台,则估计会有其它形式的优惠,比如赠送三个VIP会员等等. 范围,无非就是: 整单 指定品类或特定品类

9、生鲜电商平台-推荐系统模块的设计与架构

业务需求: 对于一个B2B的生鲜电商平台,对于买家而言,他需要更加快速的购买到自己的产品,跟自己的餐饮店不相关的东西,他是不关心的,而且过多无用的东西掺杂在一起,反而不便 于买家下单,用户体验也很差,严重的会因此丢了客户.(客户觉得太难用了.一般都就会放弃使用.) 对于卖家而言,他自己就调整下自己的商品的上架与下架,然后就是调整下自己商品的价格.(蔬菜类的商品会随着市场的供求关系会有相应的波动.) 业务分析: 推荐系统:根据买家的行为习惯以及购买行为来推荐些他可能需要的东西的一套算法系统. 对于

8、生鲜电商平台-购物车模块的设计与架构

说明:任何一个电商无论是B2C还是B2B都有一个购物车模块,其中最重要的原因就是客户需要的东西放在一起,形成一个购物清单,确认是否有问题,然后再进行下单与付款. 1. 购物车数据库设计: 说明:业务需求: 1>购物车里面应该存放,那个买家,买了那个菜品的什么规格,有多少数量,然后这个菜品的加工方式如何.(如果存在加工方式的话,就会在这里显示处理.) 2>买家存在购物起送价.也就是用户放入购物车的商品的总价格如果低于配置的起送价,那么这个提交按钮就是灰色的.(不可能你点一个洋葱我们就送过去,成本

拼多多、云集、爱库存,社交电商的三驾马车有啥不同?

爱库存AAXP9M01第一家纯粹的社交电商拼多多上市已经有一段时间了,喊了多年的社交电商,终于迎来了第一股!这是有标志性意义的.能够从众多社交电商中杀出来,第一个冲到公开资本市场,拼多多实数不易,而在拼多多之后,还有多家社交电商,发展形势很好,比如云集.爱库存等,他们谁能成为拼多多之后第二个上市的社交电商呢?社交电商的发展,未来又会怎么样?02都说社交电商是未来的趋势,但社交电商跟其他电商究竟有什么不一样的呢?我们想想看,淘宝有5亿多用户,但微信有10亿多用户,剩下那五个亿去哪儿了?他们为什么不

电商网站秒杀与抢购的系统架构

一.大规模并发带来的挑战 在过去的工作中,我曾经面对过5w每秒的高并发秒杀功能,在这个过程中,整个Web系统遇到了很多的问题和挑战.如果Web系统不做针对性的优化,会轻而易举地陷入到异常状态.我们现在一起来讨论下,优化的思路和方法哈. 1. 请求接口的合理设计 一个秒杀或者抢购页面,通常分为2个部分,一个是静态的HTML等内容,另一个就是参与秒杀的Web后台请求接口. 通常静态HTML等内容,是通过CDN的部署,一般压力不大,核心瓶颈实际上在后台请求接口上.这个后端接口,必须能够支持高并发请求,

Java生鲜电商平台-生鲜售后系统的退款架构设计与代码分享

说明:任何一个电商行业都涉及到退货与退款的问题,但是生鲜电商行业还设有一个显著的特点,那就是换货.在人性面前,各种各样的退货,退款,换货的售后问题,层出不穷,那么应该如何架构与设计呢?请看下文. 由于涉及到的东西比较多,目前只讲退款的架构设计与代码分享. 退款,是一个易造成负体验的业务产品.原因是商户对于退款的要求务必退款成功.高效.快,而且又得很好地支撑业务,否则就容易招来吐槽. 退款,一个看似简单,但充满复杂性的产品. 要想做好退款系统,我们必须深入的了解业务发展趋势,将客户诉求与现状业务结