Loading [MathJax]/jax/output/CommonHTML/jax.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >基于潜在结果框架的因果推断入门(下)

基于潜在结果框架的因果推断入门(下)

作者头像
口仆
发布于 2021-06-22 11:24:49
发布于 2021-06-22 11:24:49
3.3K0
举报

4 无假设的因果推断方法

上一节详细介绍了在三类基本假设下的各种因果推断方法,然而在实践中,对于某些特定场景下的应用,例如包含依赖性网络信息、特殊数据类型(如时间序列)或特殊条件(例如存在未观测混杂因子)时,三类假设并不总是能全部满足。本节将介绍在这些假设不满足情况下的因果推断方法。

4.1 稳定单元干预值假设

稳定单元干预值(SUTVA)假设表明,任意单元的潜在结果都不会因其他单元的干预发生改变而改变,且对于每个单元,其所能接受的每种干预不存在不同的形式或版本,不会导致不同的潜在结果。该假设主要聚焦在两个方面:

  • 每个单元是独立同分布的(i.i.d.)
  • 每种干预只存在单一版本

下面将从上述两方面分别展开讨论如何在不满足假设的条件下进行因果推断。

「独立同分布」假设在大部分因果推断方法中存在,但是在部分研究领域,该假设并不成立,例如社交媒体分析、群体免疫、信号处理等。由于混杂因子与数据依赖的同时存在,非 i.i.d 下的因果推断是具有挑战性的。以社交网络分析为例,其中每个对象都是相互关联且相互影响的,在这样的情况下,实例之间通过网络结构形成内在的连接,其特征并不满足独立同分布。将「图神经网络」与因果推断模型相结合是处理网络数据的一种可行方法。具体来说,对象的原始特征与网络结构会被映射到一个表征空间中,以得到混杂因子的表征。进一步地,使用干预分配与混杂因子表征来推断最终的潜在结果。此外,由于部分对象的干预会影响到其他对象的结果,数据的依赖性通常会对因果参数的识别与估计带来干扰,有研究者提出了「分离图」(segregated graph)策略来解决这一问题,其是潜在映射混合图的推广,用来对因果模型进行表示。

另一方面,「时间序列」数据也不满足「独立同分布」假设,同样是因果推断中的一个重要问题。大部分现存的方法使用回归模型来解决这一问题,但是推理的准确性高度依赖于模型是否能够很好地拟合数据。因此,选择一个正确且合适的回归模型是非常重要的,然而在实践中,找到这样的模型并不容易。有研究者提出了一种监督学习框架,其使用分类器来替代回归模型,具体来说,其提出了一种基于给定过去变量值的条件分布之间距离的特征表示,并通过实验表明该特征表示能够为不同因果关系的时间序列提供足够不同的特征向量。对于时间序列来说,另一个需要考虑的问题是「隐藏混杂因子」(实际上这属于第二种假设,原文在第二节中又描述了一次这篇研究),有研究者提出了一种时间序列去混杂器,其利用时序性执行的多重干预分配来在存在隐藏混杂因子的情况下估计干预效果。该时间序列去混杂器采用基于多任务输出的循环神经网络架构来构建时序性因子模型,推理出替代的混杂因子,以保证所分配的干预条件独立;随后,利用所获得的替代混杂因子执行因果推断。

对于 SUTVA 假设中的第二个方面,其假定每种干预只存在一个版本,然而,如果向干预中添加一个连续型(或离散型)参数,则该假设并不会再成立。例如,在估计一系列药物治疗的个体剂量反应曲线时,为每种治疗添加一个相关联的剂量参数(连续型或类别型),则其对于类别型参数会存在多个版本,而对于连续型参数则会存在无限个版本。解决上述问题的一种方法是将连续型剂量转变为类别变量,并将特定剂量的用药方案视为一种新的干预,以满足 SUTVA 假设。

另一种不满足 SUTVA 的案例是「动态治疗策略」(dynamic treatment regime),其包含多个干预阶段,由一系列决策规则构成。动态治疗策略的典型应用场景是精准用药,其能够根据患者的个体特征提供更加个性化的用药方案与计量控制,并随着时间的推移不断调整,以持续获得最优治疗策略。这些异质性特征被称为定制变量(tailoring variables)。为了获得有用的动态治疗策略,研究者们提出了一种偏差自适应内部随机化设计,并使用序列性多重分配随机试验(SMART)给出了这类设计的通用性框架,在 SMART 中,每个个体会被执行多次随机化(序列性发生)以制定决策规则。

为了从观察性数据中估计最优动态决策规则,常用的两种方法是 「Q 学习」「A 学习」。Q 学习是强化学习领域的经典无模型方法,其在给定单元信息的每个决策点上使用假定的回归模型估计结果;而在 A 学习中,模型仅针对部分回归(包括干预之间的对比)以及给定单元信息的每个决策点的观测干预分配概率进行制定。两种方法都是通过与动态规划相关的反向递归拟合过程进行实现。

4.2 可忽略性假设

可忽略性假设也被成为无混淆假设,指给定背景变量

,干预的分配

独立于潜在结果,即

。在该假设下,对于具有相同背景变量

的单元,其干预分配可以视为随机。显然,识别并收集所有的背景变量是不可能的,因此该假设很难被满足。例如,在一项尝试去估计个体药物治疗效果的观察性研究中,药物的分配方式是综合个体的一系列因素完成的,部分因素(例如社会经济地位)很难衡量,从而变成了隐藏的混杂因素。现有的研究大部分遵循无混淆假设,即所有的混杂因子均被度量,但实际上这并不能实现。利用大数据,我们能够通过代理的方式来处理这些潜在的未观测混杂因子。

有研究者使用「变分自编码器」(variational autoencoder)来推理观测混杂因子与潜在混杂因子、干预分配及结果联合分布之间的复杂非线性关系。另一种方式是通过网络信息来捕捉观测混杂因子与潜在混在因子之间的模式关系,有研究者使用了「图卷积神经网络来获得隐藏混杂因子的表征;还有研究者使用「图注意力层」来将网络化观察性数据中的观测特征映射到部分潜在混杂因子的 D-维空间中,通过捕捉网络化观察性数据中的未知边权重。

此外,有研究者指出,即使混杂因子被观测到,也不意味着其包含的所有信息都对因果推断有利,有时估计器只需要混杂因子的部分特征。因此,如果可以构建了一个好的干预效果预测模型,则可能只需要将输出直接插入到因果效应估计中,而无需学习真正的混杂因子。该篇文章将因果估计问题化简为一个针对干预与结果的半监督预测问题,通过高质量嵌入模型来替代完全确定的生成模型,应用于半监督预测。

只利用观察性数据来解决混杂因子问题通常是较困难的,另一种解决思路是将实验数据与观察性数据进行结合。有研究者利用有限的实验数据来纠正基于大量观察性数据所训练出的因果效应模型的隐藏混杂因素,即便观察性数据与实验数据并不完全吻合。该方法与现有的方法相比采用了更弱的假设。

总的来看,上述方法均旨在解决关于观测与未观测混杂因子的问题,下面介绍一种绕过无混淆假设执行因果推断的方法。我们可以使用「工具变量」(instrumental variables),其只会对干预分配产生影响。工具变量的变化会导致不同的干预分配,其独立于潜在变量,而该干预分配可以视为用于因果推断的随机化。有研究者将工具变量分析拆分为两个监督式阶段,通过深度神经网络实现。其首先对给定工具变量与其他协变量的干预变量的条件分布进行建模,使用包含针对条件干预分布的积分的损失函数进行训练,然后利用现有的监督学习技术来估计因果关系。

4.3 正值假设

正值假设,也被称为协变量重叠或共同支持,指对于任意值的

,干预分配都不是确定的。其是在观察性研究中识别干预效果的必要假设,然而其在高维数据集中的满足情况却鲜有研究讨论。有研究者指出,正值假设属于一种强假设,在高维数据集中很难满足,为了支持该主张,该研究又讨论了严格重叠假设,表明严格重叠限制了对照与干预协变量之间的一般差异。因此,正值假设要强于研究人员的预期。基于上述结论,建议在高维数据集中采用能够消除干预分配信息同时保留无混淆假设的方法,例如「修剪」(trimming)方法(删除未重叠区域的记录)、「工具变量调整方法」(从协变量中消除工具变量)等。

5 常用数据集及代码库

本节将提供进行因果推断研究的相关实验信息,包括可获得的公开数据集,以及部分经典方法的开源代码库。

5.1 公开数据集

由于反事实结果永远不可能被观测到,因此很难找到包含真实 ATE 的观察数据集。因果推断研究所采用的观察性数据集通常是「半合成」的:部分数据集(例如 IHDP)通过随机数据集(RCT试验)生成得到,采用固定的生成过程,并从中移除有偏子集来模拟观测数据中的选择偏差;部分数据集则将随机数据集与观测对照数据集结合起来以创造选择偏差。下面对部分常见的数据集进行总结。

「IHDP」。该数据集基于面向低体重早产儿的 RCT 试验数据构建。预干预协变量共有 25 种,包括出生体重、头围、新生儿健康指数、母亲年龄、教育水平、用药、饮酒情况等。干预组为新生儿提供了强化的高质量儿童护理与专家上门服务。结果变量是新生儿的认知测试得分。为了模拟选择偏差,去除了干预组的一个有偏子集。

「Jobs」。该数据集是 Lalonde 试验数据集与 PSID 对照数据集的结合。预干预协变量共有 8 种,包括年龄、教育水平、种族、收入等。干预组接受了工作培训而对照组则没有。结果变量是就业情况。

「Twins」。该数据集根据在 1989-1991 年间美国双胞胎出生的数据所构建,性别相同且体重小于 2000g 的双胞胎会被纳入记录。对于每对双胞胎,共有 46 个预干预变量,包括妊娠周数、孕期护理质量、怀孕风险因素、居住情况等。双胞胎中较重的新生儿视为干预组,结果变量是新生儿一年的死亡率。选择偏差通过用户自定义的干预分配机制(隐藏部分数据)来进行模拟。

「BlogCatalog」。该数据集用于网络化观测数据的因果推断。其是一个社交博主网络,每个博主都是一个观测,通过某种社会关系相关连接。博主的描述通过关键词的词袋模型表示为特征。结果变量是读者对每个博主的评价,如果该博主的博客在移动设备(桌面)上阅读更多,则其属于干预组(对照组)。

「Flickr」。该数据集同样是网络化观测数据,基于图片分享平台 Flickr 构建。拥有 Flickr 账户的用户是观测,通过某些社会关系与其他用户连接。每个用户的特征是其兴趣标签,干预分配与结果变量与 BlogCatalog 相同。

「News」。该数据集包含了 5000 篇从纽约时报语料库汇总随机抽取的新闻文章。其进一步包含读者对于新闻的观点数据,最初被用于在两种干预选项下的反事实推理。在后续研究中被扩展至具有相关剂量参数的多重干预。

「MVICU」。该数据集用于估计与剂量参数关联的多种干预下的个体剂量反应曲线。其包含患者对于重症监护室中不同机械通气配置的反应。数据集来源于知名的 MIMIC III 数据库,包含了 ICU 患者的各类数据。

「TCGA」。该数据集是世界上最大的基因数据集合,其收集了 9659 位不同癌症患者的基因表达数据。该数据集同样可以用于估计与剂量参数关联的多种干预下的个体剂量反应曲线(上述三个数据集与剂量相关的因果效应估计均出自同一文章)。干预选项为用药、化疗与手术,结果变量是接受干预后的癌症复发风险。

「THE」。该数据集是一项为其四年的纵向班级规模研究,用来度量班级规模对学生成绩与其他方面的影响。由于这是一个随机对照试验,所以需通过移除有偏子集的方式来人工引入混杂因子。

「FERTIL2」。该数据集的目标是研究妇女接受超过七年(或恰好七年)的教育对家庭中子女数量的影响。其包含多个观测混杂因子,如年龄、是否拥有电视、是否居住在城市等。工具变量是一个表示妇女是否在上半年出生的二元指示器。该数据集通常用于工具变量的研究。

5.2 开源代码库

本节总结了之前所述的各类因果推断方法的开源代码以及包含多种方法的工具包,因果推断领域的常用工具包如下表所示,关于具体方法的开源代码可以参考原文,此处不作展开。

工具包名称

支持方法

语言

Dowhy

倾向回归分层 & 匹配、逆倾向加权、回归方法

Python

Causal ML

基于树的方法,元学习方法

Python

EconML

双重稳健估计器、正交随机森林、元学习方法、深度工具变量

Python

causalToolbox

贝叶斯可加回归树、因果森林、基于树的元学习器

R

6 应用

在现实世界场景中,因果推断有着各种各样的应用。总的来看,因果推断的可以总结为以下三个方向:

  • 「决策评估」。干预效果估计的目的就是评价干预的有效性,因此与干预相关的决策评估自然是因果推断的应用方向之一。
  • 「反事实估计」。反事实学习对决策支持相关领域有着重要作用,其可以提供不同决策选择的潜在结果。
  • 「处理选择偏差」。在很多真实世界应用中,出现在所收集数据集中的记录并不能够代表整个目标群体。如果不能很好地处理这一选择偏差,则会大大影响所训练模型的泛化性。

下面将详细介绍几个因果推断方法在真实世界应用中的具体领域。

6.1 广告

正确衡量广告活动的效果可以回答关键的营销问题,例如新广告是否会增加点击数或增加销量。由于开展随机试验的成本过高,基于观察性数据估计广告效果在工业界和学术界引起了越来越多的关注。举例来说,有研究者提出了随机最近邻匹配方法来估计数字化营销活动的干预效果;有研究者使用协变量平衡广义倾向得分(CGBPS)来分析政治广告的效力。

然而,对于在线广告领域,通常需要处理复杂的广告干预形式,包括离散或连续、一维或多维等。我们可以将一个广告设置为一种基线干预,然后通过比较不同值的干预与基线干预的潜在结果来估计干预效果。为了估计多维值干预下的潜在结果,研究者采用了基于树的方法与基于稀疏加性模型的方法来实现潜在治疗与基线治疗之间的比较。

除了纯净的观察性数据,在真实世界场景中,数据集还可能由来自对照组的大量样本与来自随机试验(同时包含对照与干预)的少量样本组成(类似上一节中公开数据集的构建方法)。有研究者使用最小化的建模假设集合将随机试验数据集与对照数据集进行结合,使得模型在预测对照与试验结果上保持相似的性能。在这一假设下,其所提出的方法联合学习对照与干预结果预测器,并对两个预测器参数之间的差异性进行正则化。

以上讨论描述了因果推断方法在决策估计方向上的潜在应用:衡量广告活动的效果。其在广告领域的另一个研究方向是处理选择偏差。由于广告系统中的选择机制,展示事件(广告)与未展示事件之间存在着分布差异,忽略这种偏差可能会导致广告点击预测的不准确,从而引起经济损失。为了处理选择偏差,有研究者提出了类似 3.1.1 节双重稳健估计方法的双重稳健策略学习,其包含两个子估计器:从个观测样本得到的直接方法估计,以及将倾向评分作为样本权重的 IPS 估计器。

此外,一些研究防线由于商业广告系统中的确定性广告投放策略,倾向评分估计可能会存在困难。如果投放策略是随机的,低倾向评分的广告依旧有机会出现在观察性数据中,以帮助 IPS 纠正选择偏差;然而如果投放策略是确定的, 低倾向评分的广告则总是不会出现在观测中,使得倾向评分估计失败。为了解决这一问题,有研究者提出了「无倾向双重稳健」方法,其从以下两个方面对原始的双重稳健方法进行了改进:

  1. 基于在统一策略下获得的少量无偏数据训练直接方法,一定程度上避免选择偏差传播到未显示的广告
  2. 通过将观测项的倾向评分设置为 1 避免倾向评分估计,并将 IPS 与直接方法结合

简单来说,上述无倾向评分方法依赖于基于无偏小数据集训练的直接方法,来获得广告点击的无偏预测。除了上述应用,广告领域的另一个重要应用是广告推荐,将合并至下一小节进行介绍。

6.2 推荐

推荐与干预效果估计高度相关,在推荐系统中向一名用户展示一个物品可以视作将一个特定的干预应用于一个单元。与治疗效果估计中使用的数据集类似,推荐中使用的数据集通常由于用户的自我选择而存在偏差。例如在电影评分数据集中,用户倾向于为其喜爱的电影评分;而在广告推荐数据集中,推荐系统只会向其认为对广告感兴趣的用户进行推荐。在上述案例中,数据集中的记录并不代表整个群体,即出现了选择偏差。选择偏差为推荐模型训练与评估带来了挑战。基于倾向评分的重加权样本可以有效解决该问题,执行倾向评分加权后的改进效果估计可以通过下式计算:

其中

是推荐系统质量的度量值,

是用户数量,

是物品数量,

是表明观察性数据中第

个用户与第

个物品的交互情况的二元变量,

可以是任何推荐质量的度量方式,例如累积增益(CG)、折扣累积增益(DCG)、第 k 精准率等,

是边际概率矩阵,其项定义为

。上述改进后的质量度量是对整个群体上真实度量

的无偏估计,其定义为

。有研究者基于该无偏质量度量提出了用于推荐的「倾向评分经验风险最小化」(ERM)方法:选择

用于以下问题的优化:

,其中

如式 (32) 中所定义。其后,又涌现出一些研究来解决倾向评分加权的缺陷,包括估计方差降低、数据稀疏性处理、双重稳健估计等。

除了使用基于 IPS 或双重稳健估计的方法来解决选择偏差之外,与广告领域类似,一些研究采用小型无偏数据集来纠正选择偏差。在该案例中, 数据集包含在对照策略下的大量反馈记录以及在随机推荐下的少量记录里。CausalEmbed(CausE)是这一方向的一个代表性方法,其提出了一种全新的矩阵分解算法,通过联合分解上述两个数据集构成的矩阵,并通过正则化干预与对照组表征之前的差异来连接两个模型。

6.3 医学

学习治疗每位患者的最佳治疗规则是在医学领域应用干预效果估计方法的终极目标。当不同药物(治疗)的效果可以被估计时,医生能够针对性地开具更加合理的处方。有研究者提出了为实现这样的目标需要面临的两个挑战:混杂因子的存在以及未观测混杂因子的存在。虽然基于随机对照试验数据集进行分析是最佳解决方案,但其存在一定的局限性:

  • 随机对照试验的目标是估计 ATE 而非 ITE,数据量通常较少,限制了推导个性化治疗规则的能力
  • 如第二节中所述,开展随机对照试验的成本过高,有时还存在伦理问题

因此,从观察性数据集中推导个性化治疗规则以及将试验性数据与观察性数据结合是两个较为热门的研究方向。对于利用观察性数据集的方向,多项研究在无混淆假设下基于估计的 ITE 来推导个性化治疗规则。不过处理未观测混杂因子的研究相对较少,尚待进一步探索。

6.4 强化学习

从强化学习的角度来看,ITE 估计可以视为一种上下文多臂赌博机问题,其中干预是动作(action),结果是奖励(reward),背景变量则是上下文信息。赌博机问题的开发与试探(exploration and exploitation)同随机试验与观察性数据类似。因此,这两个领域共享类似的挑战:

  • 如何获得无偏的结果 / 奖励估计?
  • 如何处理观测或未观测混杂因子对干预分配 / 动作与结果 / 奖励的影响?

对于第一个挑战,「重要性采样加权」是离线策略评估中常用的方法。权重被设置为目标策略与观测策略之间的概率,类似于 IPW 方法。不过,该方法受困于较高的方差,同时高度依赖于分配的权重。为了改善这一点,类似于 ATE 估计中的双重稳健方法,有研究者提出了双重稳健策略估计(6.1 节有提到)。其后,还有大量研究在不同的设置下对上述两种方法进行改进。

对于第二个挑战,当所有的混在因子被观测到时,我们可以直接使用上一段提到的方法优化无偏奖励。然而,当存在未观测混杂因子时,其可能会导致引入危害而非收益的策略,如同观察性数据一样。有研究者提出了「混杂-稳健学习框架」,在倾向性权重的不确定集合上优化策略,以控制未观测的混在因子。

6.5 其他应用

因果推断的应用并不局限于上述领域,与效果衡量、决策制定、选择偏差处理相关的领域均是潜在的应用方向,例如:

「教育」。在教育领域,通过比较不同教学方法对学生的效果,可以选择更好的教育方法。此外,ITE 估计可以通过估计不同教育方法对每个学生的结果来强化个性化学习。

「政策性决策」。因果推断可以帮助决定一项政策是否应当推广至大量人口。例如,多项研究基于 Jobs 数据集来考察“谁将从免费工作培训中受益最大”这一问题。

「提升机器学习方法」。各类用于处理选择偏差的平衡方法可以用来提升机器学习方法的稳定性。例如,有研究采用重加权方法来提升学习到的模型在未知环境中的泛化能力。

7 总结

因果推断是一个历史悠久的研究方向,其为发现真实世界中的因果关系提供了一种有效的方式。如今,机器学习的蓬勃发展为这一领域带来了新的活力,同时,因果推断中的思想也促进了机器学习的发展。本综述对潜在结果框架下的因果推断方法进行了较为全面的总结,全文的思维导图如下:

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2021-05-14,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 口仆 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Mybatis注解开发使用二级缓存
一、Mybatis注解的一级缓存 Mybatis注解的一级缓存不用配置 ,系统默认是开启的 二、Mybatis注解的二级缓存 1、 在 SqlMapConfig 中开启二级缓存支持 <!-- 配置二级缓存 --> <settings> <!-- 开启二级缓存的支持 --> <setting name="cacheEnabled" value="true"/> </settings> 2、在持久层接口中使用注解配置二级缓存 //开启二级缓存 @CacheNamespace(blocking = true) p
暴躁的程序猿
2022/03/23
3270
Mybatis注解开发使用二级缓存
Mybatis注解开发
实现复杂关系映射之前我们可以在映射文件中通过配置<resultMap>来实现,在使用注解开发时我们需要借助@Results 注解,@Result 注解,@One 注解,@Many 注解。
SerMs
2022/03/30
3250
Mybatis注解开发
MyBatis注解开发
指的是MyBatis中SqlSession对象的缓存,当我们执行查询之后,查询的结果会同时存入到SqlSession为我们提供一块区域中。
用户3112896
2019/09/26
4910
快速学习-Mybatis 缓存
像大多数的持久化框架一样,Mybatis 也提供了缓存策略,通过缓存策略来减少数据库的查询次数,从而提高性能。
cwl_java
2020/04/01
3770
MyBatis-延迟加载与MyBatis缓存(面试题)
 resultMap中的association(has a)和collection(has some)标签具有延迟加载的功能。  延迟加载的意思是说,在关联查询时,利用延迟加载,先加载主信息。需要关联信息时再去按需加载关联信息。这样会大大提高数据库性能,因为查询单表要比关联查询多张表速度要快。
全栈程序员站长
2022/08/31
3480
MyBatis-延迟加载与MyBatis缓存(面试题)
mybatis框架一级和二级缓存
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
多凡
2019/11/01
4880
_Mybatis一级缓存和二级缓存(带测试方法)
OK,从运行结果上我们可以知道结果集返回到同一个对象中,而他们的哈希值反而不一样,说明执行第二次查询的时候新建了一个对象并且该对象指向那个对象并且将SqlSessionFactory中的数据赋值到新建的那个对象。其实从控制台打印的日志我们也可以得出,并没有执行查询方法,因为没有打印SQL语句,而且缓存也是从0.0改成了0.5,因此我们可以断定二级缓存存放的是数据而不是对象。
会洗碗的CV工程师
2023/11/21
7760
_Mybatis一级缓存和二级缓存(带测试方法)
Mac做java开发(九):Mybatis基于注解开发多对多表格操作
同样,对应的项目源码仓库地在:https://github.com/Jesselinux/Java_Web
用户5473628
2019/09/20
4820
Mac做java开发(九):Mybatis基于注解开发多对多表格操作
Mybatis的一级缓存、二级缓存
一级缓存: 它指的是Mybatis中SqlSession对象的缓存。 当我们执行查询之后,查询的结果会同时存入到SqlSession为我们提供一块区域中。 该区域的结构是一个Map。当我们再次查询同样的数据,mybatis会先去sqlsession中 查询是否有,有的话直接拿出来用。 当SqlSession对象消失时,mybatis的一级缓存也就消失了。
暴躁的程序猿
2022/03/23
3860
Mybatis的一级缓存、二级缓存
快速学习-Mybatis 注解开发
这几年来注解开发越来越流行,Mybatis 也可以使用注解开发方式,这样我们就可以减少编写 Mapper 映射文件了。本次我们先围绕一些基本的 CRUD 来学习,再学习复杂映射关系及延迟加载。
cwl_java
2020/04/01
7590
MyBatis框架:第十章:mybatis缓存
mybatis缓存 说明: 缓存指的是把一些常用的数据,保存到一个可以高速读取的缓冲区中。方便程序在频繁读取的时候,可以快速的取出数据。这就叫做缓存。
Java廖志伟
2022/09/28
2850
MyBatis框架:第十章:mybatis缓存
面试题:MyBatis二级缓存[通俗易懂]
①、一级缓存是SqlSession级别的缓存。在操作数据库时需要构造sqlSession对象,在对象中有一个数据结构(HashMap)用于存储缓存数据。不同的sqlSession之间的缓存数据区域(HashMap)是互相不影响的。
全栈程序员站长
2022/09/29
7840
面试题:MyBatis二级缓存[通俗易懂]
MyBatis缓存技术入门就这么简单
在一个Web项目中,查询数据库中的操作算是一个非常常用的操作,但是有些数据会被经常性的查询,而每一次都去数据库中查询这些重复的数据,会很消耗数据库的资源,同时使得查询效率也很低,而 MyBatis 中就通过缓存技术来解决这样的问题,也就是说:将一些经常查询,并且不经常改变的,以及数据的正确对最后的结果影响不大的数据,放置在一个缓存容器中,当用户再次查询这些数据的时候,就不必再去数据库中查询,直接在缓存中提取就可以了
BWH_Steven
2020/02/20
2980
【MyBatis框架点滴】——MyBatis二级缓存
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/huyuyang6688/article/details/51770863
DannyHoo
2018/09/13
3400
【MyBatis框架点滴】——MyBatis二级缓存
MyBatis缓存
像大多数的持久化框架一样,MyBatis 也提供了缓存策略,通过缓存策略来减少数据库的查询次数,从而提高性能。
星哥玩云
2022/09/14
2880
MyBatis 二级缓存详解
我们在上一篇文章介绍了 MyBatis 的一级缓存的作用,如何开启,一级缓存的本质是什么,一级缓存失效的原因是什么?MyBatis 只有一级缓存吗?来找找答案吧!
cxuan
2019/08/13
3860
MyBatis 二级缓存详解
初识mybatis中的缓存
mybati的一级缓存作用域为session,当执行opensession()后,结果和sql会被存入缓存中,如果下次执行的sql(参数 语句)相同就直接从缓存当中拿取,而不再执行sql从数据库查询
许喜朝
2020/08/11
4880
快速学习-Mybatis 延迟加载策略
通过前面的学习,我们已经掌握了 Mybatis 中一对一,一对多,多对多关系的配置及实现,可以实现对象的关联查询。实际开发过程中很多时候我们并不需要总是在加载用户信息时就一定要加载他的账户信息。此时就是我们所说的延迟加载。
cwl_java
2020/04/01
9400
快速学习-Mybatis 延迟加载策略
Mybatis 框架实战(下)
当在同一个session范围内执行查询的时候,如果执行相同的查询,那么第二次查询会从缓存中获取数据。
Jingbin
2019/04/10
4340
MyBatis:缓存,延迟加载,注解应用
实际开发过程中很多时候并不需要总是在加载用户信息时就一定要加载他的订单信息。此时就是我们所说的延迟加载。
RendaZhang
2020/09/08
9330
MyBatis:缓存,延迟加载,注解应用
相关推荐
Mybatis注解开发使用二级缓存
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档