首页 > 其他分享 >有向无环图DAG

有向无环图DAG

时间:2024-07-03 17:58:57浏览次数:8  
标签:IPFS DAG hash self 存储 环图 节点

 

有向无环图(Directed Acyclic Graphs),简称为DAG.

 

 

用于SAT相关文献——查询 Directed Acyclic Graphs SAT 结果

    • Using Directed Acyclic Graphs to Coordinate Propagation and Search for Numerical Constraint Satisfaction Problems. ICTAI 2004: 72-81 2003
 

MerkleDAG作为IPFS中的一种创新的数据结构,通过有向无环图的方式连接数据块,实现了高效的数据查找和验证。它具有数据的唯一性和完整性、高效的数据查找和良好的可扩展性等优势。在IPFS中,MerkleDAG被广泛应用于文件存储和传输、数据存储和传输等方面。尽管面临一些挑战,但MerkleDAG的发展前景广阔,有望推动分布式存储和数据交换的发展。

 

 

 

 

 

 

区块链研究中把DAG作为一种去中心化的压缩存储结构。相关资料网址:

https://docs.ipfs.tech/

https://docs.ipfs.tech/concepts/merkle-dag/#further-resources

 

可以安装专门的APP:

Install the IPFS Desktop App

https://docs.ipfs.tech/install/ipfs-desktop/#windows

IPFS桌面(打开新窗口)是IPFS的官方桌面客户端。它带有一个内置的IPFS节点,可以让你锁定文件,并给你一个共享文件的链接。这是开始将您的文件固定到IPFS的最简单的方法之一。

 

Measuring the IPFS network

https://docs.ipfs.tech/concepts/measuring/#kpis

https://probelab.io/tools/

ProbeLab团队正在开发工具,以持续监控IPFS网络几个关键部分的性能。可以找到当前的工具集,以及详细的描述和链接。

 

 merkle-dag专门知识:

 

Merkledag 关系和数据分开存储

在分布式存储系统中,Merkle DAG(Merkle-Dagorier)是一种数据结构,用于表示数据的分层图。在Merkle Dag中,节点被分为两类:数据节点和链接节点。数据节点包含数据块,而链接节点用于链接数据节点,创建一个DAG(有向无环图)。

在Merkle DAG中,关系和数据是分开存储的。每个数据节点包含数据本身及其Merkle哈希值,而链接节点仅包含链接信息和链接到的数据节点的Merkle哈希值。

以下是一个简单的Python示例,演示如何在Merkle DAG中存储和检索数据:

 1 import hashlib
 2  
 3 class MerkleNode:
 4     def __init__(self, data):
 5         self.data = data
 6         self.hash = self.calc_hash(data)
 7         self.links = []
 8  
 9     def calc_hash(self, data):
10         return hashlib.sha256(data.encode()).hexdigest()
11  
12     def add_link(self, node):
13         self.links.append(node.hash)
14  
15     def __repr__(self):
16         return f"MerkleNode(hash='{self.hash}', data='{self.data}', links={self.links})"
17  
18 # 创建节点
19 node1 = MerkleNode("data1")
20 node2 = MerkleNode("data2")
21 node3 = MerkleNode("data3")
22  
23 # 添加链接
24 node1.add_link(node2)
25 node1.add_link(node3)
26  
27 # 打印节点信息
28 print(node1)
29 print(node2)
30 print(node3)

在这个例子中,每个MerkleNode实例代表一个数据节点。add_link方法用于添加指向其他节点的链接。hash属性是通过对数据内容进行哈希计算得到的。关系(链接)是在links数组中存储对应节点的哈希值。

在实际的分布式存储系统中,这些节点可以被分布在不同的节点上,而每个节点只需要存储自己的数据和链接信息,不需要存储所有数据本身。这样的设计使得数据可以被高效地分布式存储和检索。

 

IPFS的数据结构——Merkle DAG

https://www.jianshu.com/p/a1614566936f

 

 

 

  DAG拓扑结构存储区块

在区块链技术中,DAG(有向无环图)是一种数据结构,通常用于比特币和以太坊的区块链中,以存储交易信息和区块引用。在这种结构中,每个块都可以指向一个或多个前驱块,但没有前驱可以指向它,因此形成了一个复杂的网络。

在Python中,可以使用字典来存储DAG拓扑结构,其中键是块的哈希值,值是一个列表,包含了所有直接前驱的哈希值。

以下是一个简单的示例,展示了如何在Python中创建和操作这样的DAG拓扑结构:

 1 # 初始化一个空的DAG
 2 dag = {}
 3  
 4 # 添加块和它们的前驱
 5 def add_block(block_hash, predecessors):
 6     dag[block_hash] = predecessors
 7  
 8 # 获取一个块的直接前驱
 9 def get_predecessors(block_hash):
10     return dag.get(block_hash, [])
11  
12 # 示例用法
13 add_block('block1', ['block0'])  # block1有一个前驱block0
14 add_block('block2', ['block1', 'block3'])  # block2有两个前驱block1和block3
15 add_block('block3', [])  # block3没有前驱
16  
17 # 打印出来看看
18 print(dag)

 

 

这个简单的代码段展示了如何初始化一个DAG,如何添加新的块和它们的前驱,以及如何检索给定块的前驱。在实际的区块链应用中,你可能还需要处理并发冲突、路径验证等问题,但这些都是在正确实现DAG数据结构的基础上进行的。

 

   
   
   
   
   
   
   
   
   
   
   
   
   
   
   

标签:IPFS,DAG,hash,self,存储,环图,节点
From: https://www.cnblogs.com/yuweng1689/p/18282302

相关文章

  • 前端vue3项目dagre-d3基础配置项及流程图组件示例(包括安装依赖)
    目录引言d3是什么?dagre是什么?dagre-d3是什么?dagre-d3配置项流程图示例依赖安装组件示例总结引言因为很多文档都是英文,刚开始调研的时候比较费劲,文档里的配置像示例又比较分散,就自己整理了一下,附上测试时写的示例d3是什么?d3.js 是一个强大的JavaScript库,用于在......
  • 海豚调度调优 | 正在运行的工作流(DAG)如何重新拉起失败的任务(Task)
    ......
  • 2022-06-28-dagum基尼系数分解工具
    dagum基尼系数分解工具相比于传统的基尼系数而言,Dagum基尼系数能够将其分解为地区内差距、地区间差距以及超变密度。Dagum基尼系数的相关计算公式如下:1、总体基尼系数:2.子群内部基尼系数3.子群之间基尼系数4.子群内差异对总体基尼系数贡献5.子群间差异对总体基尼系数......
  • 2022-05-08-dagum基尼系数分解工具更新
    对Dagum基尼系数分解工具进行了更新,主要是针对在多个年份数据中,各个组别排序不一致的情况下,需要一年年来做的问题。在新的版本中,不论各个年份的组别均值排序是否相同,软件都支持对一年或者多年的数据进行分解运算。以上。需要的话,扫描微信二维码加我就行。附带有使用文档、参......
  • 通过API触发airflow的DAG任务
    背景以前编写的DAG都是通过定时触发的,当前有一个场景需要通过手动提交API来触发,这样能够在用户需要的时候,主动触发执行任务,于是就有了这篇内容的摸索。之前只知道airflow支持通过API来触发任务,但是具体如何操作是真不会,看了官方的API文档,也没找到具体方法,特别是认证这块一直没解......
  • DAG与拓扑排序
    现实生活中我们经常要做一连串事情,这些事情之间有顺序关系或依赖关系,做一件事情之前必须先做另一件事,如安排客人的座位、穿衣服的先后、课程学习的先后等。这些事情可以抽象为图论中的拓扑排序(TopologicalSorting)问题。例题:P4017最大食物链计数给出一个食物网,要求出这个食物......
  • 拓扑排序--有向无环图中一个节点的所有祖先
    题目描述给你一个正整数 n ,它表示一个 有向无环图 中节点的数目,节点编号为 0 到 n-1 (包括两者)。给你一个二维整数数组 edges ,其中 edges[i]=[fromi,toi] 表示图中一条从 fromi 到 toi 的单向边。请你返回一个数组 answer,其中 answer[i]是第 i 个节......
  • 每日一题: 2192. 有向无环图中一个节点的所有祖先
    给你一个正整数 n ,它表示一个 有向无环图 中节点的数目,节点编号为 0 到 n-1 (包括两者)。给你一个二维整数数组 edges ,其中 edges[i]=[fromi,toi] 表示图中一条从 fromi 到 toi 的单向边。请你返回一个数组 answer,其中 answer[i]是第 i 个节点的所有 祖......
  • Pedagogic metalguage
    Atthebeginning,thedirectoradoptedamediumshotsocialcloseandanoutoffocusangletoshowthegraybackgroundafterashipwreck.Thegrayenvironmentemphasizesthespiritlessandgrievedatmospherebecausemanypeoplelefttheirlivesinthetr......
  • Pedagogic metalanguage of Harry Potter
    ✨TheimagesbelowisallfromHarryPotter.Prominence(visual)2.Size:small3.Sharpnessforegroundcolor:Harryisoutoffocusandthesnakeisinfocus4.Address(visual):indirectgaze5.Angle:noangle6.Distance/shot:closeshot......