如何在超级账本中管理动态数据格式

问题描述 投票:0回答:1

我是

hyperledger
的新手,并在
chaincode
中为虚构的农产品编写
golang
。供应链系统主要利益相关者的流程如下:

农场->物流->聚集中心->物流->冷库->物流->经销商->物流->零售商->消费者

正如您所看到的,每个阶段的数据格式都会不同。例如,在第一阶段,数据格式将是这样的:

{
"harvestDate":"xx-xx-xxxx",
"farmerName":"abc",
"batchId":"123456",
// so on
}

因此批次 ID 123456 的分类帐的第一个状态将类似于上面的数据格式。现在,如果产品现在处于物流阶段,那么数据可以是这样的:

{
"vehicleNumber":"ABCDE1234",
"driverName":"XYZ",
"loadingDate":"xx-xx-xxxx",
// so on
}

如果我将此数据输入到

hyperledger
分类帐中,那么数据格式将完全改变。所以如果我查询当前的
hyperledger
,就会得到上面的物流数据格式。

在前端我们想要显示这样的数据:

  Farm Details -> Logistics Details -> Aggregation Center details -> logistics details -> distributor details -> retailer details -> end customer details

利益相关者的数量可以是动态的,具体取决于产品,有些可能有 4 个利益相关者或 6 个利益相关者(如上所述)。

现在,如果前端必须根据产品的批次 ID 查询产品的数据,它将获得每个阶段不同的数据格式。所以我想知道前端如何才能知道哪种数据格式属于供应链的哪个阶段,以便前端可以相应地绑定它?

我尝试将上一阶段的以前的数据格式复制到新的数据格式中,并得到了这样的结果

  1. 农场
 {
“batchId”:123456,   //unique identifier to identify the batch
“cropName”:”Rice”,
“cropVariety”:”Basmati”,
“farmLocation”:”XYZ”,
“farmer”:”ABC”,
“harvestingDate”:”2023-11-06”
}
  1. 物流
{
// copied same above data 
"vehicleNumber":"ABCDE1234",
"driverName":"XYZ",
"loadingDate":"xx-xx-xxxx",
}
  1. 聚合中心
{
// copied same above data
"aggregationLocation":"XYZ",
"dateOfAggregation:"xx-xx-xxxx",
}

正如你所看到的,我只是将以前的状态复制到新状态中,如果系统中有很多利益相关者,这可能会使账本数据的格式非常大。

我想知道如何让系统更加动态,以便前端可以根据批次id轻松查询产品的数据,并根据产品的不同阶段适当地显示产品详细信息。

我正在使用 Hyperledger Fabric v2.5

提前致谢

hyperledger-fabric hyperledger smartcontracts chaincode
1个回答
0
投票

Hyperledger Fabric 将数据存储为 Key=Value 对。在你的例子中,我认为这是“价值”部分。您还必须考虑“关键”部分。

例如您可以使用:

batch_status_by_id_123456 = {
    "current status"="cold storage", 
    "farm status"=true, logistics_status=true
}

farm_batch_id_123456={ “batchId”:123456, //标识批次的唯一标识符 “作物名称”:“水稻”, “cropVariety”:“巴斯马蒂”, “农场位置”:“XYZ”, “农民”:“ABC”, “收获日期”:“2023-11-06” }

Logistics_batch_id_123456={ // 不需要复制,可以通过key来查询 farm_batch_id_123456 "车辆编号":"ABCDE1234", "司机姓名":"XYZ", "加载日期":"xx-xx-xxxx", }

aggregation_batch_id_123456={ // 无需复制,可通过key Logistics_batch_id_123456查询 "聚合位置":"XYZ", "聚合日期:"xx-xx-xxxx", }

所以你不需要复制信息。只需对不同的信息“集合”使用不同的密钥即可。

与使用关系数据库相同,可以使用不同的表。

© www.soinside.com 2019 - 2024. All rights reserved.