Hyperledger Composer 性能(添加资产)非常低
Hyperledger composer performance(adding asset) is very low
以下代码是检查每秒或每分钟可以添加多少实体的简单代码。
createAsset 正在调用后端 (http:localhost:3000) 并使用 post.
添加数据
当我使用此代码进行测试时,添加 10 个实体需要 23 秒。
我正在使用 composer 0.19.12 和 fabric 1.1。当我检查来自 GitHub 的一些线程时,使用索引 couchdb 提高了性能。我该如何使用该功能? (我需要再次检查,但它似乎是最近 composer 版本的默认功能)
addEntities: async function() {
var start = 0;
var end = start + 100;
var sd = new Date();
console.log(sd.getHours()+':'+sd.getMinutes()+':'+sd.getSeconds()+'.'+sd.getMilliseconds());
for(var i = start; i<end; i++) {
entityData.id = i.toString();
await this.createAsset('/Entity', 'model.Entity', entityData);
}
var ed = new Date();
var totalTime = new Date(ed.getTime()-sd.getTime());
console.log(totalTime.getMinutes()+':'+totalTime.getSeconds()+'.'+totalTime.getMilliseconds());
},
我的模型真的很简单如下
asset Entity identified by id {
o String id
}
我已按照 david_k 的建议更改测试代码以发送多个交易,如下所示。
addEntities: async function() {
var start = 15000;
var dataNumber = 1200;
var loopNumber = 400;
var end = start + dataNumber;
var sd = new Date();
console.log(sd.getHours()+':'+sd.getMinutes()+':'+sd.getSeconds()+'.'+sd.getMilliseconds());
var tasks = [];
for(var i = start; i<end; i++) {
entityData.id = i.toString();
if((i-start)%loopNumber === loopNumber - 1) {
await this.createAsset('/Entity', 'model.Entity', entityData);
console.log('--- i: ' + i + ' loops completed');
}
else {
this.createAsset('/Entity', 'model.Entity', entityData);
}
}
var ed = new Date();
var totalTime = new Date(ed.getTime()-sd.getTime());
console.log(totalTime.getMinutes()+':'+totalTime.getSeconds()+'.'+totalTime.getMilliseconds());
},
更改的目的是同时发送多个请求,它似乎运行良好,因为与以前的代码相比,它显示出更好的性能。但是,性能仍然在 8 TPS 左右。由于原来的测试代码是每2sec~3sec 1笔交易,所以改进了很多。但是,8TPS看起来根本不能用于商业应用。即使它也不适合测试目的。有人可以为此提供一些建议吗?
看看你的示例代码,这听起来很正确,我假设你正在使用 fabric-dev-servers 包,这是一个非常简单的结构网络,可以帮助用户开始开发业务网络并想尝试在 hyperledger fabric 网络上,或者您正在使用多组织教程中的 byfn 网络,这是一个联盟中 2 个组织网络的 hyperledger fabric 示例,用于演示 composer 在多组织结构设置中所需的操作步骤。
Hyperledger Fabric 是一种基于最终一致性的分布式账本技术。 Composer 实现了一个 submit/notify 模型,一旦提交了交易,它将在该交易已提交到分类账时通知客户。您可以配置网络中您有兴趣在发生这种情况时通知您的对等方,但默认设置是所有这些,因此一旦所有对等方都将其提交到分类帐,其余服务器就会响应。
Hyperledger fabric 不会提交单独的交易,它会将它们分批放入块中,然后这些块会提交到分类帐中,并且它会等待一段时间,然后使用已提交的当前交易集构建该块提交排序,因此块可以包含一个或多个事务。您需要为您的用例配置结构,以确定如何将交易分批放入块中。
以下代码是检查每秒或每分钟可以添加多少实体的简单代码。 createAsset 正在调用后端 (http:localhost:3000) 并使用 post.
添加数据当我使用此代码进行测试时,添加 10 个实体需要 23 秒。
我正在使用 composer 0.19.12 和 fabric 1.1。当我检查来自 GitHub 的一些线程时,使用索引 couchdb 提高了性能。我该如何使用该功能? (我需要再次检查,但它似乎是最近 composer 版本的默认功能)
addEntities: async function() {
var start = 0;
var end = start + 100;
var sd = new Date();
console.log(sd.getHours()+':'+sd.getMinutes()+':'+sd.getSeconds()+'.'+sd.getMilliseconds());
for(var i = start; i<end; i++) {
entityData.id = i.toString();
await this.createAsset('/Entity', 'model.Entity', entityData);
}
var ed = new Date();
var totalTime = new Date(ed.getTime()-sd.getTime());
console.log(totalTime.getMinutes()+':'+totalTime.getSeconds()+'.'+totalTime.getMilliseconds());
},
我的模型真的很简单如下
asset Entity identified by id {
o String id
}
我已按照 david_k 的建议更改测试代码以发送多个交易,如下所示。
addEntities: async function() {
var start = 15000;
var dataNumber = 1200;
var loopNumber = 400;
var end = start + dataNumber;
var sd = new Date();
console.log(sd.getHours()+':'+sd.getMinutes()+':'+sd.getSeconds()+'.'+sd.getMilliseconds());
var tasks = [];
for(var i = start; i<end; i++) {
entityData.id = i.toString();
if((i-start)%loopNumber === loopNumber - 1) {
await this.createAsset('/Entity', 'model.Entity', entityData);
console.log('--- i: ' + i + ' loops completed');
}
else {
this.createAsset('/Entity', 'model.Entity', entityData);
}
}
var ed = new Date();
var totalTime = new Date(ed.getTime()-sd.getTime());
console.log(totalTime.getMinutes()+':'+totalTime.getSeconds()+'.'+totalTime.getMilliseconds());
},
更改的目的是同时发送多个请求,它似乎运行良好,因为与以前的代码相比,它显示出更好的性能。但是,性能仍然在 8 TPS 左右。由于原来的测试代码是每2sec~3sec 1笔交易,所以改进了很多。但是,8TPS看起来根本不能用于商业应用。即使它也不适合测试目的。有人可以为此提供一些建议吗?
看看你的示例代码,这听起来很正确,我假设你正在使用 fabric-dev-servers 包,这是一个非常简单的结构网络,可以帮助用户开始开发业务网络并想尝试在 hyperledger fabric 网络上,或者您正在使用多组织教程中的 byfn 网络,这是一个联盟中 2 个组织网络的 hyperledger fabric 示例,用于演示 composer 在多组织结构设置中所需的操作步骤。
Hyperledger Fabric 是一种基于最终一致性的分布式账本技术。 Composer 实现了一个 submit/notify 模型,一旦提交了交易,它将在该交易已提交到分类账时通知客户。您可以配置网络中您有兴趣在发生这种情况时通知您的对等方,但默认设置是所有这些,因此一旦所有对等方都将其提交到分类帐,其余服务器就会响应。
Hyperledger fabric 不会提交单独的交易,它会将它们分批放入块中,然后这些块会提交到分类帐中,并且它会等待一段时间,然后使用已提交的当前交易集构建该块提交排序,因此块可以包含一个或多个事务。您需要为您的用例配置结构,以确定如何将交易分批放入块中。