`

SQl+多服务部署并发访问DB

阅读更多
数据库
student
   id  name
   001  zhangshan
   002 lisi
   003 wangw
course
  student_id course score
   001   语文  80
   002   语文  68
   003   数学  90
   001   数学  38

以上两张表满足外键约束:course.student_id  =student.id
1. 用一条SQL语句查出分数在60以下(不及格)的学生姓名及课程。
select s.name,c.course from student s LEFT JOIN course c on c.student_id = s.id where  c.score < 60
2. 用一条SQL语句查询考试人数排名前三的课程名称和考试人数
select c.course,count(*) count from course c group by c.course order by count desc limit 0,3;
3. 用一条SQL语句查出各门课程的及格率(及格率:该门课程成绩60分及以上的学生数/考试的总学生数)
select sum(c.score >=60)/count(*) tt1 ,c.course x  from course c group by c.course
4. 用一条SQL语句查出选修了4门课程以上且所有课程都及格(成绩60分及以上)的学生姓名。
select s.name from student s where s.id in(select c.student_id from course c  group by c.student_id  HAVING sum(c.score >= 60)/count(c.course) >=1);


设计方案

ID 商品ID 仓库ID 仓库库存量 累计卖出量
1 Sku001 Store001 10000 129
2 Sku002 Store001 13000 750

功能性需求:当前store001的多个的商品在做抢购业务,需要您在库存子系统里设计一个库存扣减的服务API给订单子系统使用,当订单创建时,实时调用库存扣减的API,更新库存表的累计卖出量,如果累计卖出量超出仓库库存量,则库存扣减失败。
非功能性要求:
1)库存子系统采用10个节点的集群方式部署,有多个Java进程对外提供库存扣减API,需要解决并发修改数据的脏读和脏写的问题
2)库存扣减API需要实现幂等性,当订单模块多次相同的报文请求库存扣减时,只扣减一次,重复扣减的报文请求返回扣减成功。
3)库存子系统的每1个APP部署节点,需要达到1000TPS的库存扣减的性能要求(1秒内完成1000笔库存扣减)
部署硬件清单:
1) Mysql部署的虚拟机8C 64G    1台
2) java应用部署的虚拟机2C 4G  10台
3) eruka服务发现服务器共用,订单子系统从eruka拿到库存子系统的10个节点的IP地址清单后,采用轮询IP的方式调用库存子系统的API
4) 不能再使用mencache或redis等其他第三方软件
针对以上的要求,请给出库存扣减的服务API的核心设计思想(10分)和API接口定义(10分)及代码实现概要(20分)

多进程更新db是个经典问题,一般采用2种方式
1、row lock :select  for update ;update table set saleCount = queryInDbCount + 1;
2、单独一个微服务提供update操作
      启动时将表数据缓存到内存,放入map<String,Integer>中,每次都从缓存去比对更新
    再起一个线程去轮询   定时批量更新 saleCount =  queryInDbCount + 增量
注意库存快满的时候细节处理

订单模块多次相同请求 主要是注意这个看负载服务是否对同一个来源的ip调用同一个子系统处理

tps比较 这个需要性能测试比较 现有服务器性能情况下 哪种更优 
个人预估:db单独提供库存服务表简单事务服务下,第一种形式db加锁,8c的机器性能足够胜任,性能更优的话 第二种应该更好
参考url
https://www.cnblogs.com/micrari/p/8029710.html
https://www.cnblogs.com/sdgf/p/5740998.html


分享到:
评论

相关推荐

    比较SQL Server、Oracle和DB2

    - **价格**:相比于Oracle和DB2,SQL Server提供了更多经济实惠的版本,如Express版和Developer版,适合小型企业和个人开发使用。 - **T-SQL**:SQL Server使用Transact-SQL(T-SQL)作为其SQL方言,扩展了标准SQL...

    db2数据库驱动9.7jar包(全) db2jcc.jar+db2jcc_license_cu.jar

    在开发和部署Java应用程序时,理解如何正确配置和使用这些JDBC驱动是确保与DB2数据库无缝集成的关键。 总之,DB2数据库驱动9.7版本的`db2jcc.jar`和`db2jcc_license_cu.jar`是Java开发者连接到DB2数据库的基础。...

    GaussDB工作级开发者认证

    DAS(Data Admin Service)是华为云提供的可视化数据库管理服务,具备执行SQL、高级数据库管理和智能化运维功能,是GaussDB推荐使用的管理工具。此外,第三方工具如DBeaver也是支持GaussDB的图形界面SQL客户端。 在...

    Laravel开发-sqlrelay

    综上所述,Laravel 结合 SQL Relay 提供了一个强大而灵活的数据库访问方案,特别适合于需要处理大量并发请求或跨网络部署的应用场景。通过合理的配置和使用,开发者可以充分利用 SQL Relay 的特性来优化数据库操作。

    SQL Server Native Client 11-sqlncli-11驱动

    2. **OLE DB接口**:OLE DB是另一种数据访问接口,它比ODBC更底层,提供更多的数据库功能,如事务管理、并发控制和复杂数据类型的支持。SQL Server Native Client 11中的OLE DB组件允许开发者利用这些高级特性构建...

    SQL server ce 数据库访问实例( ADOCE)

    在本文中,我们将深入探讨如何利用ADOCE(ActiveX Data Objects for CE)进行SQL Server CE数据库的访问。 1. **SQL Server CE简介** SQL Server CE是一种非服务器式的数据库系统,它无需专门的数据库服务器进程...

    DB2资料数据备份,数据还原,DB2原理

    9. **并发控制**:QS06_DB2v8_Concurrency.pdf可能讲解并发环境下DB2如何处理多用户同时访问,如锁定机制、死锁检测和解决策略。 10. **修复包应用**:QS12_DB2v8_ApplyingFixpaks.pdf将涉及DB2的版本更新和修复包...

    DB2 9 基础(730 考试)认证指南,第 6 部分 数据并发性

    数据并发性是多用户环境中数据库管理系统(DBMS)的关键特性之一,指的是多个用户或事务同时访问和修改同一数据集而不引起冲突的能力。在企业级应用中,特别是在交易处理、在线服务和大数据分析场景下,数据并发性是...

    华为GaussDB 100 官方文档.pdf

    - **高可用性**:支持多副本、故障自动切换,确保服务的连续性和稳定性。 - **高安全性**:提供数据加密、访问控制等安全机制,保护企业数据的安全。 - **易用性**:提供SQL兼容接口,降低用户的学习成本,同时支持...

    SQL Server Native Client 9.0~11.0(32位和64位).rar

    SQL Server Native Client是微软开发的一款专门用于与SQL Server交互的客户端库,它包含了ODBC(Open Database Connectivity)和OLE DB(Object Linking and Embedding, Database)两种数据访问接口。这个压缩包文件...

    DB2 v9.1 服务器快速入门

    - **可扩展性**: 支持更多的并发用户数量,同时能够处理更大的数据集。 - **易用性**: 提供了一套完整的工具和文档,使数据库管理员能够更容易地进行安装、配置和维护工作。 #### 安装与配置 - **Windows平台下的...

    CRM中SQLServer2005报表服务研究文档

    报表服务支持多种数据源类型,包括SQL Server、Oracle、ODBC、OLE DB等。在CRM中,数据通常来自CRM数据库,报表服务通过创建数据集来组织和预处理数据,以便在报表中使用。数据集可以是静态的,也可以是动态的,根据...

    Delphi+SQL数据库

    9. **多线程与并发**:如果应用需要处理大量数据或高并发操作,理解如何在Delphi中使用多线程技术(如TThread类)和同步原语是非常重要的。 10. **部署与安装**:完成开发后,需要将应用程序打包成可执行文件,并...

    ado+sql 通讯录

    总结起来,“ado+sql 通讯录”是一个利用ADO技术与SQL数据库进行交互的通讯录管理系统,涉及到数据库操作、用户界面设计、数据安全等多个方面。开发者通过这个系统可以方便地管理个人或组织的联系人信息,实现数据的...

    db2v10.5百度盘链接.zip

    7. **分区技术**:DB2的分区功能允许大型数据库被划分为多个部分,分别在不同的服务器上运行,提高了并发处理能力和系统性能。 8. **高可用性与灾难恢复**:支持镜像、日志运输、数据库复制等多种高可用性和灾难...

    IBM DB2考试 试题

    3. **并发控制**:DB2使用多版本并发控制(MVCC)机制,允许多个用户同时访问数据库,而不会互相干扰。 4. **备份与恢复**:DB2提供多种备份策略,包括完整备份、增量备份和差异备份,以及灾难恢复方案,保障数据...

    php(laravel+apache+SQLserver)配置链接SQLserver所需文件

    9. **性能优化**:根据应用需求,可能还需要调整SQL Server的连接池设置,以优化并发性能和资源使用。 10. **持续集成/持续部署(CI/CD)**:在生产环境中,确保配置过程自动化,避免手动配置带来的错误和不一致性。 ...

    DB2认证题(730和731)

    6. 并行处理与并发控制:理解DB2的并行查询执行和事务并发控制机制,如锁和多版本并发控制(MVCC)。 7. 数据治理:学习数据质量,数据生命周期管理,以及元数据的概念。 通过730和731这两部分的认证,考生将全面...

    DB2v8_Family

    它即将推出,旨在提供高性能和低成本的数据库服务,特别适合那些希望快速部署和管理数据库而无需高级DBA技能的企业。 ### DB2 Personal Edition(PE) DB2 Personal Edition是一款针对工作站和个人计算机的全功能...

    IBM DB2考试认证试题

    7. 并发控制:熟悉DB2的并发控制机制,如事务处理、死锁检测和解决、多版本并发控制(MVCC)等。 8. 大数据与云集成:了解DB2如何处理大数据,包括Hadoop集成、流处理,以及在云计算环境中的部署和管理。 9. 开发...

Global site tag (gtag.js) - Google Analytics