当前位置: 首页 > 知识库问答 >
问题:

Hyperledger fabric-并发事务

冉高寒
2023-03-14

我想知道如何使用hyperledger Composer在hyperledger fabric中执行并发事务。当我试图针对同一资源同时提交两个事务时,会出现以下错误:

共有1个答案

莘聪
2023-03-14

我最近遇到了这个问题,并通过创建一个异步函数调用promise数组来解决它,然后一次解决一个。

我的事务将asset2Ids和asset3Ids数组中的项添加到Asset1上的数组字段中。我的事务都作用于相同的资产,因此我得到了一个MVCC_READ_COLLACK错误,因为在提交每个事务之前,读/写集是更改的。通过强制事务以同步方式解决,解决了此冲突:

// Create a function array
let funcArray = [];
for (const i of asset2Ids) {
   // Add this transaction to array of promises to be resolved         
   funcArray.push(()=>transactionFunctionThatAddsAsset2IdToAsset1(i).toPromise());
}

for (const j of asset3Ids) {
  // Add this transaction to array of promises to be resolved
  funcArray.push(()=>transactionFunctionThatAddsAsset3IdToAsset1(j).toPromise());
}

// Resolve all transaction promises against asset in a synchronous way
funcArray.reduce((p,fn) => p.then(fn), Promise.resolve());
 类似资料:
  • 我正在实现一个JDBC数据库访问API(基本上是一个包装器),我正在使用来处理事务操作。看起来一切正常,但我无法理解jdbcTemplate如何管理并发事务。为了说明我的观点,我将在学生创造的基础上给你们一个简单的例子。让我们创建两个学生,约翰和杰克。第一个没有错误,第二个只有一个错误,下面是步骤和代码。 约翰开始交易 学生道 主控制程序 如何知道一个事务正常,而另一个事务不正常?据我所知,尽管我

  • 我有相同的模块,连接数据库运行在两个服务器(后台和前台)。它与同一个数据库连接。 我使用JPA(Hibernate实现)和Spring事务管理。 我有以下问题: 我必须用两个不同字段的最大值1更新表a中的字段a(表a中的字段a,表b中的字段b) 案例1: 更新前 表A fA = 100 tableB fB=102 更新后 表a fA=103 tableB fB=102 案例2: 更新前 表A fA

  • 我正在尝试用Connector/J和MySql构建一个Java(JDK1.8)应用程序。有人告诉我,Serializable是最高级别,但它会影响性能,所以Serializable并不常用。 但是考虑一下这种情况: 有两个提交将更新同一行的字段(提交A和提交B)。如果A和B同时发生,并且隔离级别不可序列化,则会出现数据竞争,这会导致字段不一致。但在可序列化级别,这两个更新不会同时发生,因此A发生在

  • 我试图使用在官方Fabriz-Samples存储库中找到的invoke函数同时向fabric提交两个事务。 你知道吗?

  • Hibernate 的事务和并发控制很容易掌握。Hibernate 直接使用 JDBC 连接和 JTA 资源,不添加任何附加锁定行为。我们强烈推荐你花点时间了解 JDBC 编程,ANSI SQL 查询语言和你使用的数据库系统的事务隔离规范。 Hibernate 不锁定内存中的对象。你的应用程序会按照你的数据库事务的隔离级别规定的那样运作。幸亏有了 Session,使得 Hibernate 通过标识

  • null Redis事务是有限的,无法特定键,并且所有键在上都不被监视;我们仅限于给定客户端上的单个正在进行的事务。 我见过许多redis用户声称lua脚本是他们所需要的全部的线程。甚至redis官方文档也表示,他们可能会删除交易,转而支持lua脚本。然而,有些情况下这是不够的,比如最标准的情况:使用redis作为缓存。 假设我们想从Redis中的持久数据存储中缓存一些数据。下面是一个快速的过程: