首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

保持事务打开是否被认为是一种糟糕的做法?

保持事务打开被认为是一种糟糕的做法。事务是一组数据库操作的逻辑单元,要么全部成功执行,要么全部回滚。保持事务打开意味着在一个长时间的操作过程中保持数据库连接和事务一直处于打开状态,直到操作完成或者手动提交或回滚事务。

这种做法存在以下几个问题:

  1. 资源占用:保持事务打开会占用数据库连接和事务资源,如果长时间不释放,会导致其他请求无法获取到数据库连接,影响系统的并发性能。
  2. 锁定冲突:事务打开期间,数据库会对相关数据进行锁定,以保证事务的一致性和隔离性。如果事务持续时间过长,其他事务可能会因为等待锁而阻塞,导致系统性能下降。
  3. 数据一致性难以保证:长时间的事务操作增加了数据一致性的风险。如果在事务期间发生了错误或异常,可能需要回滚整个事务,导致之前的操作全部无效,造成数据不一致的情况。
  4. 容错性差:长时间的事务操作增加了系统发生故障的风险。如果在事务期间发生了系统崩溃或断电等情况,可能无法完全恢复事务的状态,导致数据丢失或不一致。

因此,保持事务打开是一种糟糕的做法。在实际开发中,应该尽量缩短事务的持续时间,及时提交或回滚事务,以提高系统的性能和数据的一致性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

HTTP连接管理

因此,HTTP/1.1(以及 HTTP/1.0 各种增强版本)允许 HTTP 设备在事务处理结束之后将 TCP 连接保持打开状态,以便为未来 HTTP 请求重用现存连接。...在事务处理结束之后仍然保持打开状态 TCP 连接被称为持久连接。非持久连接会在每个事务结束之后关闭。持久连接会在不同事务之间保持打开状态,直到客户端或服务器决定将其关闭为止。...如果服务器愿意为下一条请求将连接保持打开状态,就在响应中包含相同首部。...这里有个 Keep-Alive 响应首部例子,这个例子说明服务器最多还会为另外 5 个事务保持连接打开状态,或者将打开状态保持到连接空闲了 2 分钟之后。...大多数浏览器都会在重载一个缓存 POST 响应时提供一个对话框,询问用户是否希望再次发起事务处理。 正常关闭 TCP 连接是双向

51920

2PC时代即将结束,2PC只是提供原子性提交而不是事务本身

提交延迟不是最大问题 在2PC中进行提交需要协调者和每个参与者之间进行2次往返,并且生成了4n消息,其中n参与者数量是多少。有时,这认为是协议中许多实际问题根本原因。...这种情况在没有2PC情况下就存在,但是协议使得情况总是最糟糕,因为在2PC中,最慢参与者定义了持有锁时间。 2PC非常适合云端?...通常,可用性和性能认为是造成这种情况原因。尽管这不是2PC强项,但可以说安全(或缺乏安全性)更为重要。 2PC假定参与者和协调者之间高度信任。...使云服务能够充当2PC参与者有效地为拒绝服务(DoS)攻击打开了大门。 2PC不是唯一提交协议 2PC只是原子提交一种可能解决方案。它在某些情况下工作良好,但在违反其假设环境中使用时性能较差。...实际上,很少有2PC对参与者假设。围绕事务确定性设置更多约束条件允许使用其他方法来最大程度地减少锁保持时间。

68310

微服务业务开发三个难题-拆分、事务、查询(下)

图1 - 通过发布事件到消息broker来更新数据库 另一种做法就是,如图2所示,就是应用程序追加事务日志到数据库(a.k.a.commit log),将每个记录更改转换为事件,然后把事件发布到消息broker...这种做法一个重要好处就是应用程序本身不需要任何改变。 然而,一个缺点是,这种做法一种底层(low-level)事件,而不是上层业务事件。...图2 - 追加数据库事务日志 第三种解决方案就是,图3所示这种,使用数据库表来作为一种临时性message queue。...发布一个事件到message broker并稍后更新做法总是不能提供一种read-your-writes一致性,也就是只能保证最终一致。 追加事务日志提供了一致读取,但却不能发布高级业务事件。...更复杂事件数据库(event store)将使用另一种做法,这种做法具有更高性能和可扩展性。例如,Eventuate Local使用追加事务日志方式。

2K130

精通Java事务编程(6)-可串行化隔离级别之真串行

若多线程并发在过去30年中认为是获得良好性能关键所在,那么究竟是什么改变致使单线程执行? 如下两个进展促使我们重新审视: RAM越来越便宜,许多场景现在都能将完整活动数据集加载到内存。...大多DB不能高效完成这项工作,因此几乎所有的 OLTP 应用程序都避免在事务中等待交互式用户输入,以此来保持事务简短。...如果不允许在数据库中进行并发处理,且一次只处理一个事务,则吞吐量将会非常糟糕,因为数据库大部分时间都花费在等待应用程序发出当前事务下一个查询。...若找到一种对数据集分区方法,以便每个事务只需在单分区中读写数据,则每个分区就能拥有自己独立运行事务处理线程。...事务是否可以是划分至单个分区很大程度上取决于应用数据结构。简单KV数据通常可以非常容易地进行分区,但是具有多个次级索引数据可能需要大量跨分区协调。

40430

23条JavaScript初学者应知最佳实践方法

如果以后某个时候,你需要在这种if语句中增加更多命令,那该怎么办呢? 没法子,你就只能重写这块代码了。处理这个问题底线是对于省略写法保持谨慎。...例如: 糟糕做法 for(var i = 0; i < someArray.length; i++) { var container = document.getElementById('container...= function() { console.log(this.name); } 然而,这种方式因其行为并不是我们所想那样而认为是糟糕实践。...var someItem = 'some string' function doSomething() { return 'something' } 话虽如此,但这是一种非常糟糕做法,可能导致更大问题...Timer”特性来优化代码 需要一种快速简单方法来检测一个操作花费多长时间么?

41410

23条JavaScript初学者应知最佳实践方法

如果以后某个时候,你需要在这种if语句中增加更多命令,那该怎么办呢? 没法子,你就只能重写这块代码了。处理这个问题底线是对于省略写法保持谨慎。...例如: 糟糕做法 for(var i = 0; i < someArray.length; i++) { var container = document.getElementById('container...= function() { console.log(this.name); } 然而,这种方式因其行为并不是我们所想那样而认为是糟糕实践。...var someItem = 'some string' functiondoSomething() { return 'something' } 话虽如此,但这是一种非常糟糕做法,可能导致更大问题...Timer”特性来优化代码 需要一种快速简单方法来检测一个操作花费多长时间么?

49730

《数据仓库工具箱》- 第三章零售业务中知识点汇总

在设计事务事实表初期,应该先估算一下最大表情况,或者一个周期内增量数量 日期日历维度 可以提前建立日期维度,预先存储10年或20年日期信息,日期维度表中可包含日期,是否当天,所在周,月,年,...不在sql日期函数或者应用中计算出这些信息原因在于:首先如果关系型数据库不能很好处理日期类型,那么就糟糕了;其次大多数优化器都能高效处理多维查询,没必要对关联查询谈虎色变;并且类似节日这种信息,...将重复低粒度值保持在主维度表中是一种基本维度建模技术。规范化这些值将其放入不同表将难以实现简单化和高性能目标 2.具有内嵌含义属性 应该将维度表中自然键每一部分所表示含义存储到维度表中。...因果维度 促销维度通常被认为是一种因果维度,因为他描述了认为可能导致产品销售发生改变因素 维度模型可扩展性 新维度属性 * * 如果发现了维度新文本描述符,可以把这些属性作为新列添加进去...持久超自然键DW/BI系统控制并在系统生命周期中保持不变。类似维度代理键,它是一种简单整数序列分配方法。持久超自然键当成维度属性处理,它不能作为维度表代理主键替换方式。

87320

MobX 背后基础原理

事务 和 Actions 应该稍稍花费精力是,突变应该被打包在事务中,以使得多个改变执行是原子性。派生执行推迟到事务结束时,但依然是同步执行了它们。...更酷是,如果在事务结束之前使用了一个计算值,MobX 将会保证你得到一个更新后值! 实际上几乎没人明确使用事务,在 MobX 3 中,事务甚至弃用了。因为 action 自动应用了事务。...对于计算值,MobX 可以感知它们是否在某处使用。这意味着计算值可以自动延迟并垃圾回收。这节省了大量引用,并对性能有显著积极影响。 计算值强制执行为无副作用。...但核心部分将保持非 Proxy,直到绝大多数设备和浏览器支持它。...总结 MobX 设计为一种通用应用反应式库,而不只是用来重新渲染 UI 工具集。 相反,它推广了一种有效工作(兼具性能和效果)概念,那就是数据应该尽量由其他数据推断出来。

1.5K10

糟糕程序员面试

要注意回答者说话艺术,因为哪怕其实个人贡献并不大,也可以把话说得很漂亮。 引荐 论点:“你应该聘请引荐的人,聘请那些同事推荐的人。但是请确保一定要彻底检查这些引荐。”...但这并不意味着他们就一定是糟糕编码人员。稍微培训一下就可以改善他们编码风格。 这种方法很难识别智力/解决问题能力。 最佳做法: 可以看看他们代码,但是要有保留地接受对代码风格解释。...可能他们现在使用是某种特定语言,但是他们知道他们还会去学习下一种语言。(不过,他们可能会说自己是一个前端开发人员或后端开发人员。) 最佳做法: 掌握知识是一个艰难过程。...但是,都很糟糕,都有问题。 那么……你能做什么? 接受一点:任何面试方法都是有缺陷,都是糟糕。 所以,我们需要找出最不那么糟糕一种。然后好好实现。...这意味着: 确定你需要哪些技能(掌握起来是否现实)。各个技能权重?真正问题?你能给予什么帮助? 确定你如何(或者是否要)评估每种技能。什么样问题或方法会有效?(你也可以选择多种方法。)

28420

MartinFowler告诉你大数据架构师必备NoSQL技能-版本戳(上)

即便如此,在你决定用什么数据库时候也应该把是否支持事务这个问题考虑进来。 然而,有一点必须要记住,那就是事务也是有局限性。...即使在一个支持事务系统中,我们依然需要通过人为干涉来处理一些更新,而且通常这些更新也没法运行在同一个事务中,因为他们会hold住一个事务很长时间不放,事务打开时间过长也是不好。...通常应用程序只在处理完用户交互操作之后才开始“系统事务”,这样的话,锁就只持有很短时间。但是问题是,当需要计算和决策时候,也许数据已经改动了。...,然后检查之前最近那次读取和最新读取数据是否一致,有没有改变,如果没有改变,那么就将数据显示给用户。...多个机器都可以和能够生成时间戳——但是前提是,他们必须得始终保持同步。

66880

性能测试面试题库总结(40道精选题目)

答案:RBI方法是Empirix公司提出一种用于快速识别系统性能瓶颈方法,该方法基于以下一些事务: 1. 80%系统性能瓶颈由吞吐量制约。 2. 并发用户数和吞吐量瓶颈之间存在关联。 3....RBI方法先访问“小页面”和“简单应用”,从应用服务器、网络等基础层次上去了解系统吞吐量表现;再选择不同场景、设定不同并发数,使吞吐量保持趋势增长,观察系统性能表现。...在2秒之内给客户响应用户认为是“非常有吸引力”用户体验。 在5秒之内给客户响应用户认为是“比较不错”用户体验。 在10秒之内给客户响应用户认为是糟糕用户体验。...15) 一个web系统,用户从打开浏览器输入网址页面显示在浏览器中,这个过程当中,页面给用户总响应时间通常可以细分为哪些?...答案:功能测试->接口测试 ->性能测试->自动化测试 接口测试也算是功能测试一种 37) 你自认为你自己优势在哪里,对性能测试有没有你自己理解?

4.3K20

故障驱动微服务架构设计

此文背景: 之所以发布此文,是有一个直接原因,就是我们之前在线上遇到了一个使用timeout来判断是否失败案例,这是真实,结果就是效果很不好。...例如,使用max-age header可以指定资源视为新鲜最大时间。使用stale-if-error header可以确定在出现故障情况下从缓存获取资源时间长短。...负载设备有助于你系统恢复,因为它们在你持续发生事件时保持核心功能正常工作。...我们也希望我们组件能够快速失败(fail fast),因为我们不想等待断开实例直到超时。没有什么比挂起请求和无响应UI更令人失望。这不仅浪费资源,而且还会让用户体验变得糟糕。...否则,保持打开。 Circuit Breaker 面向失败测试(Testing for Failures) 你应该持续地测试你系统常见问题,以确保你服务可以携带各种故障生存生存。

1.3K70

数据库第一类第二类丢失更新

,然后选择薪水记录进行修改,打开修改页面但A突然有事离开了,页面放在那没有做任何提交。...3)这时候A操作员回来了,在自己之前打开薪水修改页面上也录入了增加薪水额1000,然后提交了。 其实上面例子操作员A和B只要一前一后做提交,悲剧就出来了。...解决思路: 基本两种思路,一种是悲观锁,另外一种是乐观锁; 简单说就是一种假定这样问题是高概率,最好一开始就锁住,免得更新老是失败;另外一种假定这样问题是小概率,最后一步做更新时候再锁住...然后在保持这个链接状态下,在做更新提交。当然这个有个前提就是要保持链接,就是要对链接要占用较长时间,这个在现在web系统高并发高频率下显然是不现实。...,都是在更新提交时做一次查询确认在更新提交,我个人觉得都是乐观做法,区别在于悲观锁b方法是通过select..for update方式,这个可能会导致其他会话阻塞,而乐观锁b方法需要多一个版本列维护

2.3K20

22条API设计最佳实践

在这个微服务世界里,后端API一致性设计是必不可少。 今天,我们将讨论一些可遵循最佳实践。我们将保持简短和甜蜜——所以系好安全带,出发咯!...首先介绍一些术语 任何API设计都遵循一种叫做“面向资源设计”原则: 资源:资源是数据一部分,例如:用户 集合:一组资源称为集合,例如:用户列表 URL:标识资源或集合位置,例如:/user 1....URL以集合开始,以标识符结束 如果要保持概念单一性和一致性。...应该: POST /alarm/245743/resend 请记住,这些不是我们CRUD操作。相反,它们认为是在我们系统中执行特定工作函数。 7....不要在URL中通过认证令牌 这是一种非常糟糕做法,因为url经常被记录,而身份验证令牌也会被不必要地记录。 不应该: GET /shops/123?

1.1K20

Jmeter性能测试

来源:http://www.uml.org.cn 性能测试概念 定义:软件性能是软件一种非功能特性,它关注不是软件是否能够完成特定功能,而是在完成该功能时展示出来及时性。...另外,由定义中及时性可知性能也是一种指标,可以用时间或其它指标来衡量,通常我们会使用某些工具或手段来检测软件某些指标是否达到了要求,这就是性能测试。...) 合理响应时间 2/5/10 (2秒之内给客户响应用户认为是非常有吸引力,5秒之内,比较糟糕,10秒之内,糟糕用户体验,超过10秒,请求失败) 响应时间-负载对应关系: ?...性能需求评估 在实施性能测试之前,我们需要对测系统做相应评估,主要目的是明确是否需要做性能测试。...系统使用的人数多少? 系统角度: a)系统架构:b)数据库要求:c)系统特殊要求: 确定性能测试点: 关键业务: 确定测项目是否属于关键业务,有哪些主要业务逻辑点,特别是跟交易相关功能点。

1K51

普京提议与美国成立信息安全合作组织,调查涉美大选指控

就在几天前,美国司法部还以 2016 年民主党全国委员会遭黑客攻击为由, 起诉了俄罗斯 12 名情报官员 。 但无论如何,俄罗斯总统都试图重启美俄之间关于信息安全事务合作讨论。...对任何关心美国信息安全利益的人来说,这样提议都将是全球两个大国领导人之间令人困惑亲密关系糟糕结局。一年前,特朗普曾在 Twitter 上对这样提议表示称赞。...无论这样提议能否真的实现,这个想法都明显背离美国国家安全准则,认为是引狼入室,尤其考虑到许多证据表明,在信息安全领域俄罗斯是美国对手,无论是现在还是过去。...2017 年,美国情报界发布了 明确声明 : 俄罗斯试图影响 2016 年美国大选做法,是莫斯科长期以来试图破坏以美国为首自由民主秩序最新体现。...但与以往做法相比,这些活动在直接程度、活跃水平,以及措施范围等方面都有明显升级。 报告指出,这些信息来源广泛。

17820

架构之:微服务和单体服务之争

如果使用了微服务,如果该微服务设计比较糟糕,那么会导致后续系统无法扩展,只能重新设计。...一种将单体服务转换为微服务做法是,将单体服务经过合理设计,比如注意软件内部模块化,包括 API 边界和数据存储方式。如果能够做好这一点,那么后续转向微服务是一件相对简单事情。...也就是说,不管是单体服务还是微服务,在构建之前都需要进行详细需求分析,经过了透彻分析,那么是否需要使用微服务一键很了解了,各个服务边界也界定出来了,那么为什么不直接使用微服务呢?...你可能会假设有许多可以很好地分离微服务隐藏在你单个项目中,等待提取。但实际上,很难进行这样划分。 如果你从一个整体开始,各个部分将变得非常紧密地相互耦合。这就是单体应用定义。...更糟糕是,这些部分将(几乎)自由地共享域对象,依赖相同共享持久性模型,假设数据库事务随时可用,因此无需补偿……从而使得再次分割事务变得非常困难。所以将现有的单体拆分成单独部分非常困难。

27920

架构之:微服务和单体服务之争

如果使用了微服务,如果该微服务设计比较糟糕,那么会导致后续系统无法扩展,只能重新设计。...一种将单体服务转换为微服务做法是,将单体服务经过合理设计,比如注意软件内部模块化,包括 API 边界和数据存储方式。如果能够做好这一点,那么后续转向微服务是一件相对简单事情。...也就是说,不管是单体服务还是微服务,在构建之前都需要进行详细需求分析,经过了透彻分析,那么是否需要使用微服务一键很了解了,各个服务边界也界定出来了,那么为什么不直接使用微服务呢?...你可能会假设有许多可以很好地分离微服务隐藏在你单个项目中,等待提取。但实际上,很难进行这样划分。 如果你从一个整体开始,各个部分将变得非常紧密地相互耦合。这就是单体应用定义。...更糟糕是,这些部分将(几乎)自由地共享域对象,依赖相同共享持久性模型,假设数据库事务随时可用,因此无需补偿……从而使得再次分割事务变得非常困难。所以将现有的单体拆分成单独部分非常困难。

26540

微服务设计 10 大反模式和陷阱!

为了防止服务不可用和无法响应,通常做法就是设置一个调用超时。此种做法表面上看是没问题,但是试想一下如下情景:发起一个购买100个商品请求,请求成功返回一个确认号。...就类似于房屋中电源断路器,当断路器关闭,电流可以通过,当断路器打开,那么电流中断一直到断路器关闭。断路器模式就是说当检测到服务方无法响应时就打开,后续请求都会被拒绝掉。...共享反模式(“I Was Taught to Share”) [ifwtivq9q8.png] 微服务普遍认为是一种不共享任何东西架构。...此种方式便于变更和开发软件,但是最大问题在于很难发觉哪一个共享模块修改以及修改原因,也无法确定自己服务是否需要这些变更。...但其能够保持服务边界上下文,同时也能保证数据时效性。

51250

HTTP 请求头部字段中 connection - keep-alive 含义

它允许访问者浏览器重用单个 TCP 连接来加载页面内容。 Keep-Alive 通常在源服务器上默认启用。 但是,如果此标头被禁用,有一些解决方案可以自己打开它。...Keep-Alive,也称为持久连接,是服务器和客户端之间一种通信模式,用于减少 HTTP 请求量并加快网页速度。...当启用 Keep-Alive 时,客户端和服务器同意为后续请求或响应保持连接打开。 默认情况下,HTTP 连接在数据事务结束时关闭。...但是,如果服务器需要同时响应多个 HTTP 请求并为每个新 TCP 连接提供一个文件,则站点页面的加载时间将会增加。 这可能会导致糟糕用户体验。...这是一张演示 Keep-Alive 工作原理图片: Keep-Alive 可以提高网站速度和性能,因为它保持客户端和服务器之间开放连接,从而节省提供文件所需时间。

70710
领券