`
dsxwjhf
  • 浏览: 73683 次
  • 性别: Icon_minigender_1
  • 来自: 安徽
社区版块
存档分类
最新评论

券池重构

阅读更多
之前的券池分成两个部分,一个 Job 和 一个 Service 。
Job 会每分钟 loop 券首位(1-9),生成一批券码往数据库里面插,这里需要做一些过滤:老券池、新券池、内存券池和券表 。
Service 里面有9个内存券池。它会在外部请求发券时定位到某个券池,看它的券够不够,够的话直接返回,否则重新去数据库捞一批进来。捞进来之后把数据库的券码删掉。
数据库有一个额外的“捞取批次表”,主要用来做幂等(防止分布式环境下捞取相同的券):
  1. 生成批次 ID
     INSERT INTO TG_ReceiptDistributePoolBatchFetch ..
     SELECT @@IDENTITY AS receiptDistributePoolBatchFetchID

  2. 查找券池表可用券码,以备插入内存券池
     SELECT * FROM TG_ReceiptDistributePool
     WHERE HeadNumber = #headNumber# AND Status = 0 AND DealID = 0 LIMIT 0, #quantity#

  ###### Transaction begin ######
  3. 更新这批券码的批次号(使用乐观锁)
     UPDATE TG_ReceiptDistributePool
     SET STATUS = 1, ReceiptDistributePoolBatchFetchID = #fetchID#
     WHERE STATUS = 0 AND ReceiptDistributePoolBatchFetchID = 0 AND ReceiptDistributePoolID IN #poolIDs[]#

  4. 重新抓取这个批次的券码
     SELECT * FROM TG_ReceiptDistributePool WHERE ReceiptDistributePoolBatchFetchID = #fetchID#
  5. 券码被输出至内存券池
  6. 异步将券码从物理券池删除
     DELETE FROM TG_ReceiptDistributePool WHERE ReceiptDistributePoolID IN #poolIDs[]#
  ###### Transaction end ######

问题
1. 显式使用 synchronized ,性能堪忧
2. 代码问题,如取券池逻辑(先检查后执行,非原子操作)
3. 性能问题,取券码发现不够时,才急急忙忙的去数据库 load

改进
1. 使用生产者消费者模式
2. 券池使用 BlockingQueue
3. Service 初始化时启动生产者线程,启10个线程向各自的内存券池填充数据
4. 外部的发券请求相当于消费者线程,根据券首位从相应券池拿券。 注意限时 take 的使用
分享到:
评论

相关推荐

    【EMD重构】.rar_EMD重构函数_IMF变量重构_tomorrowi4n_模态分解_重构

    标题中的"【EMD重构】.rar"指的是包含EMD重构过程的压缩文件,而"EMD重构函数"是指在处理EMD分解后的IMF分量时使用的特定函数。"IMF变量重构"则是指将分解得到的各个IMF重新组合成原始信号的过程。"tomorrowi4n"可能...

    从技术角度思考券服务系统的重构方案

    券服务系统的重构是一个复杂而重要的任务,涉及到对现有系统架构的深入分析,找出问题并设计出更为合理的新架构。在本文中,我们将从技术角度详细探讨券服务重构的关键点,包括现状分析、问题识别和重构方案。 首先...

    重构_重构_改善既有代码_

    《重构:改善既有代码设计》是一本由Martin Fowler所著的经典IT著作,它详细阐述了在软件开发过程中如何通过重构来提升代码质量、可读性和维护性。重构是一种系统性的方法,旨在不改变软件外在行为的前提下,改进其...

    重构(Refactoring)英文版

    ### 重构(Refactoring):改善现有代码的设计 #### 一、重构概念解析 重构(Refactoring)是一种软件工程中的重要技术,它指的是在不改变软件系统外部行为的前提下,通过改进其内部结构来提高代码质量的过程。重构...

    [电子书] 重构与模式

    Addison-Wesley Professional出版社出版的《重构与模式》一书,正是从理论和实践两个层面探讨了重构和设计模式的结合应用。 重构是一种编程技巧,它允许开发者在不改变软件外部行为的前提下,改善软件内部结构。...

    几种常见的稀疏重构算法代码.rar_FOCUSS重构_Focuss算法_focuss稀疏重构_压缩感知算法_稀疏重构

    在IT领域,稀疏重构算法是信号处理和数据科学中的一个重要概念,特别是在压缩感知理论(Compressive Sensing, CS)中。压缩感知是一种革命性的理论,它表明,如果一个信号可以用较少的非零元素(即稀疏表示)来描述...

    27丨理论一:什么情况下要重构?到底重构什么?又该如何重构?1

    重构是软件开发过程中的一个重要环节,它涉及到代码的优化、设计改进和质量提升,而不改变程序的外部行为。本文将详细探讨重构的目的、对象、时机和方法,帮助开发者理解和掌握重构的核心理念。 **重构的目的(Why...

    代码重构.pdf

    《代码重构》一书由Martin Fowler编写,是软件开发领域中关于代码质量提升的经典之作。书中详细阐述了重构代码的必要性、重构的时机以及如何安全地重构代码。重构指的是在不改变软件外部行为的前提下,改进其内部...

    重构.pdf_电子版_pdf版

    在现代软件开发领域,重构是一种常见的技术手段,旨在优化软件设计,提升代码质量。本文档《重构.pdf_电子版_pdf版》深入剖析了重构的定义、必要性,以及在实际项目中的应用,特别通过一个影片出租店应用程序的案例...

    Matlab重构算法_matlab_matlab压缩感知重构算法程序实现_压缩感知_

    在本文中,我们将深入探讨基于Matlab的压缩感知(Compressive Sensing,简称CS)重构算法的实现。压缩感知是一种理论先进的信号处理方法,它允许我们以远低于奈奎斯特定理所要求的采样率捕获信号,并能恢复原始信号...

    用于信号的EMD、EEMD、VMD分解_vmd重构_故障诊断emd_故障诊断_故障重构_VMD信号重构

    资源名:用于信号的EMD、EEMD、VMD分解_vmd重构_故障诊断emd_故障诊断_故障重构_VMD信号重构 资源类型:matlab项目全套源码 源码介绍:用于信号的分解、降噪和重构,实现故障诊断 源码说明: 全部项目源码都是经过...

    软件重构 软件重构经典PPT

    【软件重构】是一种重要的软件开发实践,旨在提升代码的质量、可读性和可维护性,同时保持软件原有的功能和外部行为不变。这一概念由 Martin Fowler 在他的著作《重构:改善既有代码的设计》中进行了深入阐述。重构...

    重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt

    重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt重构ppt

    Python代码重构的艺术:探索自动化重构工具

    ### Python 代码重构的艺术:探索自动化重构工具 #### 一、引言 Python 作为一门高级编程语言,自1991年首次发布以来,便以其简洁易读的语法、强大的标准库支持以及广泛的跨平台特性赢得了众多开发者的青睐。随着...

    项目重构方案模板、ppt

    项目重构方案模板、项目重构方案模板ppt,项目重构方案计划模板

    重构pdf+chm版本

    《重构:改善既有代码的设计》是一本由Martin Fowler所著的经典IT著作,它在软件开发领域具有极高的影响力。这本书的PDF和CHM版本都包含了关于重构和代码优化的深入探讨,是学习重构技术的理想资源。 重构是软件...

    重构改善既有代码的设计PPT课件

    重构是软件开发过程中的一个重要环节,它关注于改善已有代码的设计,以提高代码的可读性和维护性,同时保持原有功能不变。通过重构,程序员能够更有效地管理代码,提升开发效率,减少错误,并促进团队成员之间的沟通...

    重构手册 Professional Refactoring Workbook

    《重构手册 Professional Refactoring Workbook》是一本专注于软件重构实践的权威指南。本书旨在帮助开发者们理解和掌握重构这一关键技能,以提升代码质量、可维护性和软件设计的灵活性。重构是软件开发过程中的一个...

Global site tag (gtag.js) - Google Analytics