链上数据导出到数据库

本示例介绍如何将区块链上的数据导出至数据库中。您可使用示例SQL在数据库中创建中间表write_set,业务表taskmgr,以及trigger(负责将中间表的记录转换并写入业务表)。当区块链上发生交易时,您从中间表中可查询链上原始的交易写入集合,从业务表中查询最终信息。

前置条件

  1. 您需要先在区块链实例中安装云服务集成

  2. 下载云服务集成示例代码

  3. 拥有一个公网可连接的数据库实例(本示例以 RDS for MySQL 为例, 版本 >= 5.6)。

  4. 本地安装 nodev8 环境(>=8.17.0)。

操作步骤

  1. 连接到数据库实例,创建相关的库和表:

    1. 进入 DMS 控制台,登录数据库实例;

    2. 在上方菜单栏选择 “SQL 窗口 -> SQL 窗口” 开启一个新的 SQL 窗口。

    3. 将 SQL 文件 ./blockchain2db/taskmgr.sql 中的内容复制到 SQL 窗口中执行,确保语句全部执行成功;

  2. 按照发起示例交易的步骤1,在通道上安装并实例化链码 taskmgr

  3. 在控制台创建云服务集成数据库触发器:

    1. 选择通道 taskmgr 及链码 taskmgr

    2. 配置触发器的事件类型为 Tx

    3. 数据库类型选择 MySQL (这里以 MySQL 为例,可以根据实际需要选择不同的数据库类型);

    4. 根据帮助,依次填写数据库实例的地址、用户名和密码;

    5. 数据库填写 octopus

    6. 表名填写 write_set

  4. 按照发起示例交易的后续步骤,在通道上发起示例交易。

  5. 之后您可以在数据库 octopus 中查看导出的数据:

    1. 查看中间表中的原始交易写入集合: SELECT * FROM write_setwrite_set

    2. 查看业务表中的审批任务详情: SELECT * FROM taskmgrtaskmgr

发起示例交易

  1. 按照文档部署链码将示例链码 taskmgr 部署到通道中。

  2. 进入 blockchain2sms 目录,按照注释修改 main.js 中的配置参数,填入REST API地址、Refresh Token、通道名和智能合约名称。更多信息请参考文档使用REST API

  3. 执行 npm install 安装依赖包,通过 node main.js 发起示例交易。

成功示例输出

Data pushed to blockchain with transaction 701c7006f26aed8457273a00bbfcc8cea4d75eac958996e07837036ea7e2fdac
{ id: '701c7006f26aed8457273a00bbfcc8cea4d75eac958996e07837036ea7e2fdac',
  status: '200',
  events:
   [ { type: 'Contract',
       platform: 'Fabric',
       instance_id: 'csi-e2ehmfqasth-bcw7tzao2dzeo',
       network: '',
       id: '',
       name: 'event-create-task',
       content: 'eyJuY...TAz' }
Data pushed to blockchain with transaction 60a06a189415db587b49cbf91b46467bce1ea16490b19f6dfc8d520aa31240bc
{ id: '60a06a189415db587b49cbf91b46467bce1ea16490b19f6dfc8d520aa31240bc',
  status: '200',
  events:
   [ { type: 'Contract',
       platform: 'Fabric',
       instance_id: 'csi-e2ehmfqasth-bcw7tzao2dzeo',
       network: '',
       id: '',
       name: 'event-task-finished',
       content: 'eyJuY...p7In0=' } ],
  data: 'eyJu...In0=' }
Data pushed to blockchain with transaction 7810e0496a1c91a16102736b00a6f26da0baa42874a907fff26bff1b7eb3bf27
{ id: '7810e0496a1c91a16102736b00a6f26da0baa42874a907fff26bff1b7eb3bf27',
  status: '200',
  events: [],
  data: 'eyJu...nIn0=' }