基于BCOS的历史数据查询方案

这篇具有很好参考价值的文章主要介绍了基于BCOS的历史数据查询方案。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

基于BCOS的历史数据查询方案

目标

完成类fabric里gethistoryfromkey的功能,即可以根据key查询key对应数据的表更记录。

方案探究

智能合约新增逻辑

在智能合约里编写逻辑:

//在数据上链时
1.创建一个交易hash数组
2.查询该key最新的交易hash   //新增
3.将该hash写入数组         //新增
4,执行写入数据操作

较原先的合约逻辑,新增了第2第3步。

通过这个文档(查看英文文档)我们可以查询到有关区块可交易属性的 接口有:bcos 分页查询,区块链,区块链,fabric

不包含我们期望的获取交易hash(交易地址)的接口。

借用fabric源码逻辑

查看fabric源码逻辑可知。fabric并不是在计算阶段记录历史数据。

而是在提交阶段,即生成区块的时候记录的。在系统流程中将所有的key及历史数据相关信息计入了历史数据库。

图源

bcos 分页查询,区块链,区块链,fabric

解决方案

由前两个方案可知,在智能合约内部记录的方案一是没有现成的接口来实现,第二则是将复杂的流程放到了智能合约上执行,不符合节约链上资源的设计准则。所以我们可以实现的

方案1:

每次交易完成后,实时将本次交易的交易hash(甚至交易数据)和对应的key一起,记录到专门的history数据库(链上或链下皆可)里。

方案2:

而参考这个回答,我们除了从交易返回里获取交易数据外,还可以使用事件监控来获取交易数据及其变更。

但是,这个方式依旧无法获得交易hash,只能直接存储交易的数据。
bcos 分页查询,区块链,区块链,fabric

总结

​ 研究这个问题我们发现,区块链系统本身并未提供“记录历史”的功能,乍一看好像违背了其【可溯源】的特性。使用者并不能直接去根据一个key值去做历史数据追溯,但是细想才发现未必。

​ 在讨论【不可篡改】【可溯源】时,我们常常忽略这里谈论的是特性而非功能。功能是用来使用的,而特性则更多的体现在生成过程中。

​ 而在区块链系统里,生成过程中的对象就是数据。所以我们在说系统的特性的时候,其实说的是数据特性,即区块链系统的数据是【不可篡改】【可溯源】的。

一个猜想

​ 因为区块链的特殊机制,存储一直都是各区块链系统的一个重点指标。而默认对历史数据进行链上存储,无异会增加存储压力。所以这个功能也变成了一个可选项。不过对于一个长期运行的项目来说,可能根据自己需求去做部分的历史存储,会是一个比较好的折中方案。

可能这也是为什么有的区块链不直接带历史数据查询的原因吧文章来源地址https://www.toymoban.com/news/detail-786278.html

                                                               注:文中出现的【区块链】专指联盟链,公链不在讨论范围。

到了这里,关于基于BCOS的历史数据查询方案的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • oracle 大数据常见优化 &分页查询

    参考某微信社区博主,此文为温故知新;原参考博主账号与链接已丢失 1.limit 语句样式:select * from table limit m,n 适用场景:适用于数据量较少的情况(元组、百/千) 缺点:全表扫描,速度劣势,有的数据库结果集返回不稳定。limit限制是从结果集的M位置处取出N条输出,其余

    2024年02月05日
    浏览(26)
  • Mysql 数据库DQL 数据查询语言 SELECT 基本查询、条件查询、聚合查询、分组查询、排序查询、分页查询——包含DQL所有查询语句。吐血分享。

    DQL:数据查询语言; 用来对表内的数据进行查找 。Database Query Language SQL语句分为:基本查询、条件查询、聚合查询、分组查询、排序查询、分页查询。  可以发现name字段就只剩下一个张三了;   条件: 条件查询—比较运算符 比较运算符 功能 大于 = 大于等于 小于 = 小于等

    2024年01月19日
    浏览(44)
  • Elasticsearch ES操作:查询数据(全部、分页、单条)

    查询 条件查询 指定条数 返回结果

    2024年02月16日
    浏览(26)
  • Mybatis分页查询同时返回总数和数据

    我们在使用Mybatis分页查询数据列表时,在用户的一个请求中常常需要同时返回当前页的列表数据以及满足条件的数据总条数用于分页。 1)执行两次SQL,一次查列表,一次查总数       这种方法最简单,也最容易实现。 2)分页插件PageHelper       另一种常用的方式就是使用

    2024年02月14日
    浏览(24)
  • 【JaveWeb教程】(20) MySQL数据库开发之 基本查询、条件查询、聚合函数、分组查询、排序查询、分页查询 详细代码示例讲解

    在上次学习的内容中,我们讲解了: 使用DDL语句来操作数据库以及表结构(数据库设计) 使用DML语句来完成数据库中数据的增、删、改操作(数据库操作) 我们今天还是继续学习数据库操作方面的内容:查询(DQL语句)。 查询操作我们分为两部分学习: DQL语句-单表操作

    2024年02月02日
    浏览(64)
  • mysql mybatis分页查询 大数据量 非常慢

     查阅了很多博客和资料,这篇文章以思路为准,详细代码不细说,都是非常简单的方法,一看就明白。具体实现稍微百度一下就能出来。仅供参考。 如题:单表数据已经达到4千万条数据,通过mybatis的分页查询效率非常低下。         当然,前提是索引什么的优化已经都

    2024年01月19日
    浏览(31)
  • 前后端分离项目(六):数据分页查询(前端视图)

    🚀 优质资源分享 🚀 🧡 Python实战微信订餐小程序 🧡 进阶级 本课程是python flask+微信小程序的完美结合,从项目搭建到腾讯云部署上线,打造一个全栈订餐系统。 💛Python量化交易实战💛 入门级 手把手带你打造一个易扩展、更安全、效率更高的量化交易系统 好家伙,该项

    2024年02月07日
    浏览(29)
  • Sqlserver 数据库分页查询(三种方式)

    --第一种分页:sqlserver 2000-sqlserver2005 --假设:每页显示5条, 当前页:1  则查询1-5 --不等于前5条的前5条 select top 5 * from  Student where StuNo not in(select top 5 StuNo from  Student) --第二种分页查询: sqlserver 2008-sqlserver2012 select * from Student -- row_number()over()  组合函数,给查询结果创建行

    2023年04月13日
    浏览(36)
  • Elasticsearch - 聚合获取原始数据并分页&排序&模糊查询

    ES版本: 7.6. 需要按照主机ID 进行告警时间的汇总,并且还得把主机相关的信息展示出来。 注: 所有的数据都存在索引中, 通过一个DSL查询展示 实际上就是将terms聚合的结果以列表形式分页展示。 bucket_sort中 from不是pageNum,如想实现pageNum效果,from=pageNum*size即可; terms聚合

    2024年02月05日
    浏览(34)
  • MySQL大数据量分页查询方法及其优化

    ---方法1: 直接使用数据库提供的SQL语句 ---语句样式: MySQL中,可用如下方法: SELECT * FROM 表名称 LIMIT M,N ---适应场景: 适用于数据量较少的情况(元组百/千级) ---原因/缺点: 全表扫描,速度会很慢 且 有的数据库 结果集返回不稳定 (如某次返回1,2,3,另外的一次返回2,1,3). Limit限制的是从

    2024年02月15日
    浏览(23)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包