全网唯一:解答区块链中,更新数据会插入一个新的记录,而不是修改现有的记录

在FISCO BCOS CRUD中,是有update修改函数的,但为什么在实际应用中,有部分是通过向表中插入一个新的 Entry 来实现的,而不是直接修改现有的记录?这种方法其实是 “追加式” 数据更新的思想。这种思想常用于区块链应用或某些数据库系统中,特别是那些追求数据的不可变性和审计追踪的场景。

代码演示:

请看以下代码,功能分别是“能源新增接口”和”能源修改接口“,但细心的同学就可以发现了,它的修改方法不直接调用CRUD中的update函数,而是又是使用一个insert函数实现修改功能。

  • insert 函数: 这个函数向表中插入一个新条目,初始的 energy 值为 0。它确保 _numid 不为空后才执行插入操作。

  • update 函数: 在执行更新时,并没有直接修改表中的现有数据,而是插入了一个新的记录。新的记录会使用随机生成的 produce_random 数值作为 energy,然后通过 insert 方法将其添加到表中。

    function insert(string memory _numid) public returns(int) {
        int count = int(0);
        Table table = tf.openTable(TABLE_NAME);
        if(!_numid.empty()){
            Entry entry = table.newEntry();
            entry.set("energy", int(0));
            count = table.insert(_numid,entry);
        }
        emit Result(count);
        return count;
    }
    
  
    function update(string memory _numid) public returns(int) {
        int count = int(0);
        int produce_random = rand();
        Table table = tf.openTable(TABLE_NAME);
        if(!_numid.empty()){
            Entry entry = table.newEntry();
            entry.set("energy",produce_random);
            count = table.insert(_numid,entry);
        }
        emit Result(count);
        return count;
    }

追加式数据更新的思想

  1. 数据不可变性: 在区块链的设计中,数据通常是不可变的。这意味着一旦数据写入链上,就不应该被修改或删除。这有助于保证数据的完整性和安全性,使得所有数据操作都是可追溯的。

  2. 历史追踪: 通过插入新的记录而不是修改原有记录,你可以保留所有的历史操作,这对于审计、回溯和验证操作的正确性非常有用。这意味着你能够追踪到每个操作产生的数据,并能够随时检查历史记录。

  3. 版本管理: 类似于版本控制系统,每次更新都会生成一个新的版本,而不是直接覆盖旧版本。这允许系统回滚到先前的版本或者检查某个时间点的数据状态。

那么可能有同学要问了,我如果修改全部变成新增的话,那我如何知道哪些数据是新的呢?

其实,要解决这类问题只需要在字段中添加一个时间类字段即可(这里只简单回答)

何时适用这种方法?

  1. 区块链应用: 由于区块链上数据的不可篡改性,这种方法特别适合在区块链上使用,确保所有交易和状态变化都被记录下来。

  2. 日志和审计系统: 在一些需要严格的历史追踪和审计记录的系统中,这种方式能够提供非常有价值的记录和追踪能力。

  3. 分布式系统: 在某些分布式数据库或系统中,数据的追加式更新有助于保证系统的一致性和容错能力。

总结

在这种设计中,每次更新都会插入一个新的记录,而不是修改现有的记录。这种方法有助于保留历史信息,追踪变化,并确保数据的完整性和不可篡改性。这种设计思想特别适用于区块链和其他需要高度可信的应用场景。

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值