个人简介

Echo Blog


江湖无名 安心练剑
  • MySQL 数据库最佳实践,count(*),全文索引,事务、行锁与表锁、外键
    count(*) 知识点 MyISAM 会直接存储总行数,InnoDB 则不会,需要按行扫描。 潜台词是,对于 select count(*) from t; 如果数据量大,MyISAM会瞬间返回,而InnoDB则会一行行扫描。 实践 数据量大的表,InnoDB 不要轻易 select count(*),性能消耗极大。 常见坑 只有查询全表的总行数,MyISAM才会直接返回结...
    2018-09-03 00:57:39 | SQL
  • JTA
    JTA 概念 Java Transaction API (JTA) 指定事务管理器和分布式事务系统中涉及的各方之间的标准Java接口:资源管理器、应用服务器和事务应用程序。 JTA规范是Sun Microsystems与交易处理和数据库系统领域的领先行业合作伙伴合作开发的。 参考 JSR-907 作用 JTA提供: 划分事务边界 X/Open...
    2018-09-02 09:30:53 | API
  • Idempotency Patterns 幂等性的概念, RESTful 幂等操作, 幂等的实际使用
    幂等性 概念 在计算机科学中,依其应用的语境不同,幂等性一词可能有不同的含义: 在命令式编程中,如果在一个或几个调用之后系统状态保持不变,则带有副作用的子程序是幂等的,换句话说,如果从系统状态空间到与子程序相关联的自身的函数在定义中给出的数学意义上是幂等的; 在函数式编程中,如果一个纯函数在定义中给出的数学意义上是幂等的,那么它就是幂等的。 在许多情况下,这是一个非常有用的属性,因...
    2018-09-02 06:56:19 | Design
  • Compensating Transaction pattern 分布式锁事务
    补偿模式 补偿事务可能无法简单地用系统在操作开始时的状态替换当前状态,因为这种方法可能覆盖应用程序的其他并发实例所做的更改。 相反,它必须是一个考虑到并发实例所做的任何工作的智能流程。 这个过程通常是特定于应用程序的,由原始操作执行的工作的性质驱动。 概念 撤销一系列步骤执行的工作,如果一个或多个步骤失败,这些步骤一起定义一个最终一致的操作。 遵循最终一致性模型的操作通常出现在实...
    2018-09-02 05:27:14 | SQL
  • 3pc Three-Phase Commit 三阶段提交 分布式事务
    3PC 在上文中,我们讲解了二阶段提交协议的设计和实现原理,并明确指出了其在实际运行过程中可能存在的诸如同步阻塞、协调者的单点问题、脑裂和太过保守的容错机制等缺陷,因此研究者在二阶段提交协议的基础上进行了改进,提出了三阶段提交协议。 协议说明 3PC,是Three-Phase Commit的缩写,即三阶段提交,是2PC的改进版,其将二阶段提交协议的“提交事务请求”过程一分为二,形成了由...
    2018-09-02 03:03:38 | SQL
  • SQL 2PC-两阶段提交 SQL 分布式事务两阶段提交协议(2PC)是一种原子承诺协议(ACP)。
    2PC 2PC,是Two-Phase Commit的缩写,即二阶段提交,是计算机网络尤其是在数据库领域内,为了使基于分布式系统架构下的所有节点在进行事务处理过程中能够保持原子性和一致性而设计的一种算法。通常,二阶段提交协议也被认为是一种一致性协议,用来保证分布式系统数据的一致性。 目前,绝大部分的关系型数据库都是采用二阶段提交协议来完成分布式事务处理的,利用该协议能够非常方便地完成所有分...
    2018-09-02 03:03:38 | SQL
  • TCC Try-Confirm-Cancel 分布式事务
    TCC (Try-Confirm-Cancel) 分布式事务 TCC (Try-Confirm-Cancel)。TCC事务机制相对于传统事务机制(X/Open XA),其特征在于它不依赖资源管理器(RM)对XA的支持,而是通过对(由业务系统提供的)业务逻辑的调度来实现分布式事务。 概念 TCC 最早在 《Life beyond Distributed Transactions:an A...
    2018-09-02 02:54:19 | SQL
  • 分布式事务-本地消息表 (经典的ebay模式)
    本地消息表(经典的ebay模式) 该方案的核心思想在于分布式系统在处理任务时通过消息日志的方式来异步执行。 消息日志可以存储至本地文本、数据库或消息队列,然后再通过业务规则定时任务或人工自动重试。 以在线支付系统的跨行转账为例: 第一步 第一步,伪代码如下,对用户id为A的账户扣款1000元,通过本地事务将事务消息(包括本地事务id、支付账户、收款账户、金额、状态等)插入至消息表:...
    2018-09-02 02:54:19 | SQL