引言 PawSQL对TPC-H基准的Query 9进行的自动性能优化后,Query9的性能提升了1195.14%。本文将根据PawSQL的优化过程,探讨其优化 SQL 性能的有效策略与实际效果。 本文的案例可在线查看:https://pawsql.com/statement/1837384704875499522 TPC-H Query 9介绍:TPC-H 的第9个查询统计每个国家每年所有被订购零件的总利润 S_NATIONKEY, S_SUPPKEY, S_NAME, S_ADDRESS); CREATE INDEX PAWSQL_IDX0327029402 ON tpch.part(P_NAME); 索引优化分析 4️⃣ 性能提升分析 执行时间:从 260 毫秒减少到 20 毫秒。 性能提升:达到 1195.14% 的提升。 主要因素:索引优化显著改善了数据访问方式,减少了处理的行数。
案例中讨论了给特定分区的联系人发公开课通知邮件的领域逻辑,类图如图9-1。 图9-1 本书下册2018版本第8章的案例类图 时过境迁,原先使用邮件、短信甚至QQ的场合绝大部分已经改成使用微信。 以上提到的是这几年周边业务环境的变化,当然,作为讲解建模的案例,这是小问题,无非是案例的核心域知识有些跟不上时代。 已成文的2018版本第8章的“UMLChina系统2018”案例剖析,继续作为参考案例保留,放在附录中。 可以这样说,在用这个案例学习分析设计技能的过程中,我们不仅可以学习建模,还可以学习到对建模的建模。 Ries和Jack Trout,用例图和序列图的知识来源于Ivar Jacobson,阿布思考法来源于Barry Nalebuff和Ian Ayres,用例规约来源于Alistair Cockburn,分析类图来源于
责任链模式是一种对象的行为模式,责任链模式实际上是一种处理请求的模式 它让多个处理器(对象节点)都有机会处理该请求,请求通过这条加工链进行一步步的处理后。输出最终的产品产出。
例如,图9-24中的两听可乐,系统不加区分。这里的“奖品”实际上指的是奖品规格,因此需要记住某个“奖品”的数量。 图9-24 关于奖品的数据示例 那么,“数量”是哪个类的属性呢? 图9-25 奖池项 本系统只需要一个奖池,可以把“奖池”类删掉,但考虑到需要一个类来承担抽奖的责任,继续保留“奖池”类。 第一种如图9-27,在“活动”和“回答”之间建立关联。 图9-27 解决活动-试卷问题 之一 第二种如图9-28,添加一个“考试”类,和“活动”、“试卷”、“回答”关联。 图9-28 解决活动-试卷问题 之二 我们采用第二种做法,虽然多了一个类,但概念更加清晰。 目前类图的进展如图9-29。 图9-29 类图进展 (3)有的类的属性框是空白的 属性框空白不代表没有属性,因为关联也是属性。
图9-20 抽奖 9.1.6.7 步骤7及其补充约束 用例规约: 7. 系统反馈抽奖结果、剩余奖品和学员成绩排行。 7. 抽奖结果=奖品名称。 7. 剩余奖品=奖品名称+剩余数量。 此处可以用泛化,也可以用关联,如图9-21。 图9-21 两种奖品 浏览用例规约,判断“奖品”为“现金”还是“实物”不存在系统需要关注的复杂行为差异,因此选择图9-21右侧的做法,添加“奖品类型”类,“奖品类型”和“奖品”关联,“奖品类型”的多重性为 图9-22 活动 9.1.6.8 步骤8-11及其补充约束 用例规约: 8. 系统验证抽中的奖品为现金类型且存在学员的微信号。 9. 系统请求微信向学员的微信号发红包。 10. 系统保存发奖结果。 图9-23 发奖 到此,该用例规约的所有可提炼的内容已提炼完毕。
《软件方法(上)》以及下册2018年发布的电子版本,使用的案例是“UMLChina系统2018”。案例中讨论了给特定分区的联系人发公开课通知邮件的领域逻辑,类图如图9-1。 图9-1 本书下册2018版本第8章的案例类图 时过境迁,原先使用邮件、短信甚至QQ的场合绝大部分已经改成使用微信。 以上提到的是这几年周边业务环境的变化,当然,作为讲解建模的案例,这是小问题,无非是案例的核心域知识有些跟不上时代。 考虑到以上变化,本书下册更换了案例。 案例一是写书时正在关注的另一个UMLChina流程:上课时做题并抽奖,涉及到考试和抽奖的领域知识。 已成文的2018版本第8章的“UMLChina系统2018”案例剖析,继续作为参考案例保留,放在附录中。
图9-31 摘自UML 2.5.1规范 《软件方法》所叙述的方法学挑选了一些表示元素来表示模型,如图9-32。 图9-32 《软件方法》所选择的表示元素 建模的过程可能如图9-33。 图9-34左侧列表框的滚动条高度是列表框高度的1/4左右,说明支持的图是图9-34上可见部分的4倍。 可以这样说,在用这个案例学习分析设计技能的过程中,我们不仅可以学习建模,还可以学习到“对建模的建模”。 另外,我们也希望通过对工具的研发来反哺《软件方法》。 9.2.2 领域类图 注意,此处的标题是“领域类图”,和上一个案例对应内容的标题有所不同。 如果建模人员对某个领域的概念及关系在大局上有相当清晰的认识,甚至曾经建造了粗略的领域模型,或者有较强的信心能在领域专家的帮助下很快达到这个水平,那么我们可以先抛开某个具体的用例,从大局来建立领域模型,然后再参照用例规约“过滤”出目标系统的分析模型
DDD领域驱动设计批评文集>> 《软件方法》强化自测题集>> 《软件方法》各章合集>> 9.1.6 分析类图 从“学员→回答问题”用例规约的基本路径到业务规则部分提炼。 我们给关键词加下划线,逐个分析。 注意:加下划线只是为了在书中讲解方便,实际建模工作中不需要这样做,只需要看着需求规约或其他素材,一点点提炼。 9.1.6.1 步骤1及其补充约束 用例规约: 1. 执行者映射的是边界类,如图9-10: 图9-10 执行者映射边界类 *回答 “回答”提炼为类; *回答选择了题目的某个或若干个选项。 此时模型应该是这样: 图9-16 另一种选择 可能有人会想到图9-17两个关联的做法,不过这个做法并不合适。“正确”是由(命题,题目)的关联决定的,正确选项必须是选项的子集。 虽然案例中的场景和常见的考试比起来,没那么正式也没那么严肃,但本质上是一致的。我们这个考试有奖品,正式的考试奖品更大,可能是奖学金,可能是升学资格,可能是编制。
spring源码分析9 强烈推介IDEA2020.2破解激活,IntelliJ
ThreadLocal的应用案例 2.1 解决并发问题 2.1.1 java.lang.ThreadLocalRandom 2.1.2 HDFS中的Statistics ThreadLocal简介 这篇博客主要对ThreadLocal类的基础知识和实践应用进行分析。文章的重点在于应用案例的探究,同时也会对理论基础作简单的介绍。 下面从init-service-destroy三个阶段分析下其生命周期: Init 第一次调用get方法的时候完成了初始化过程。 经过上面的各种案例分析,这个问题就灰常容 易解决了,只需要将Bean的生命周期与Thread同步就行。ThreadLocal正合适。 总结 上面小节中分别分析了ThreadLocal的两个主要的应用领域: 1.解决并发问题。 2.解决数据存储问题。
框架分析(9)-Hibernate 主要对目前市面上常见的框架进行分析和总结,希望有兴趣的小伙伴们可以看一下,会持续更新的。希望各位可以监督我,我们一起学习进步。
2.读写SD卡时,需要给APP添加读写外部存储设备权限,修改AndroidManifest.xml,添加:
综合案例: toDoList案例分析 1.1 案例:案例介绍 1. 文本框里面输入内容,按下回车,就可以生成待办事项。 2. 点击待办事项复选框,就可以把当前数据添加到已完成事项里面。 3. 1.2 案例:toDoList 分析 1. 刷新页面不会丢失数据,因此需要用到本地存储 localStorage 2. 1.3 案例:toDoList 按下回车把新数据添加到本地存储里面 1.切记: 页面中的数据,都要从本地存储里面获取,这样刷新页面不会丢失数据,所以先要把数据保存到本地存储里面。 6.最后把数组存储给本地存储 (声明函数 savaDate()) 1.4 案例:toDoList 本地存储数据渲染加载到页面 1.因为后面也会经常渲染加载操作,所以声明一个函数 load,方便后面调用 1.5 案例:toDoList 删除操作 1.点击里面的a链接,不是删除的li,而是删除本地存储对应的数据。
本次分享的一个死锁案例是 涉及通过辅助索引的更新以及通过主键删除导致的死锁。希望能够对想了解死锁的朋友有所帮助。 二 案例分析2.1 业务逻辑select for update 表记录并加上 x 锁,查询数据,做业务逻辑处理,然后删除该记录。还有其他业务逻辑要更新记录,导致死锁。 no 8 PHYSICAL RECORD: n_fields 2; compact format; info bits 0*** WE ROLL BACK TRANSACTION (2)2.5 死锁分析 大家在分析死锁的时候能基于该原则去分析理清业务的sql 逻辑,基本上都能解决大部分的问题场景。 另外文章的最后我们再次复习一下 MySQL 的加几个基本原则,方便大家后面遇到死锁案例进行分析:原则 1:加锁的基本单位是 next-key lock。原则 2:查找过程中访问到的对象才会加锁。
HTTP信息头管理器,用于设置HTTP请求包的报文头。通过右键点击菜单,选择“添加->配置元件->HTTP 信息头管理器”而获得。其界面如图55所示。
本次分享的死锁案例是 更新不存在的记录加上 X GAP lock 和 insert 的意向锁冲突。希望能够对想了解死锁的朋友有所帮助。 二 案例分析2.1 业务逻辑业务逻辑: 业务需要并发不同数据(insert+update),首先是更新记录,如果发现更新的 affect rows 为0,然后就执行插入,如果插入失败,再执行更新。 no 4 PHYSICAL RECORD: n_fields 2; compact format; info bits 0*** WE ROLL BACK TRANSACTION (2)2.5 死锁分析 大家在分析死锁的时候能基于该原则去分析理清业务的sql 逻辑和执行顺序,基本上都能解决大部分的问题场景。 另外文章的最后我们再次复习一下 MySQL 的加几个基本原则,方便大家后面遇到死锁案例进行分析:原则 1:加锁的基本单位是 next-key lock。原则 2:查找过程中访问到的对象才会加锁。
o编写一个并发编程程序很简单,只需要在函数之前使用一个Go关键字就可以实现并发编程。
中间使用到了goja解析器,它的作用是在golang环境中翻译执行javascript,因为我们的gizmo采用的是javascript语法。
最后我们来到了第三部分featureCommands,也是所有命令的大头,这里一共初始化了23个命令。我们首先看下第一个callHierarchy
前面介绍了单独的匹配,如果把这个匹配过程接入到LLM,就是完整的RAG,即检索增强生成。我们先看看上一个例子还没介绍的最后几行代码