IPFS的文件存储模式
IPFS是如何进行文件存储的
- IPFS采用的索引结构是DHT(分布式哈希表),数据结构是MerkleDAG(Merkle有向无环图)
DHT(分布式哈希表)
- 参考链接
MerkleDAG(Merkle有向无环图)
- 参考链接
MerkleDAG功能
- 内容寻址:使用多重哈希来唯一识别一个数据块的内容
- 防篡改:可以方便的检查哈希值来确认数据是否被篡改,如果数据被篡改或损坏,IPFS会检测到
- 去重:由于内容相同的数据块哈希是相同的,可以很容去掉重复的数据,节省存储空间
IPFS的单文件存储
步骤
- 1、把单个文件拆分成若干个256KB大小的块(block);
- 2、逐块(block)计算blockhash,hashn=hash(blockn);
- 3、把所有的blockhash拼凑成一个数组,再计算一次hash,便得到了文件最终的hash,hash(file)=hash(hash1……n),并将这个hash(file)和blockhash数组“捆绑”起来,组成一个对象,把这个对象当做一个索引结构;
- 4、把block,索引结构全部上传给IPFS节点,文件便同步到了IPFS网络了;
注意
- 小文件(小于1KB)的文件,IPFS会把数据内容直接和Hash(索引)放在一起上传给IPFS节点,不会再额外的占用一个block的大小
- 如果对于大的文件进行数据的追加操作,仅仅是新增1KB的数据,也需要重新上传吗?事实并非如此,IPFS在储存数据的时候,同一份数据只存储一次,文件是分块(block)存储的,hash相同的block,只会存储一次,也就说,前面1G的内容没有发生改变,其实IPFS并不会为这些数据分配新的空间,只会为最后1K的数据分配一个新的block,再重新上传hash,实际占用的空间是:1G+1K;
- 即使是不同文件的相同部分也仅仅会存储一份,比如电影资源的影音部分相同,但是只有字幕部分不一样,那么不同的字幕会和音影资源拼接,形成新的文件资源。这样一来就可能会有很多文件的索引指向同一个block,就构成了前面提到的一个数据结构——MerkleDAG。
参考链接
- DHT 分布式哈希表
- Merkle trees and directed acyclic graphs (DAG)
IPFS的文件存储模式相关推荐
- java ipfs文件存储_原来IPFS是这样存储文件的
概述 CID 在介绍IPFS存储文件的远离之前,先介绍一个重要的标识--CID(Content-ID),CID是IPFS中用来表示内容的标识,可以用来表示一个文件,也可以用来表示一个文件块.如下所示, ...
- 云视通手机下载的文件存储位置_小白版丨IPFS网络怎么存储、下载文件?怎么托管网站?...
IPFS是一种用于文件存储的对等网络协议,采用的是基于内容的寻址,而非基于位置.这意味着要查找文件,我们不需要知道它在哪里(abc.com/cat.png),而是它包含的内容(QmSNssW5a9S3 ...
- Ceph存储的三种模式 部署MDS文件存储 RBD块存储 RGW对象存储
mds文件存储接口 服务端操作 1. 将监控节点制作成文件系统 我们这里是考虑到虚拟机环境,所以将监控节点制作成文件系统,生产环境中尽量不要这么做. - 在管理端admin节点操作 cd /etc/c ...
- android 读取内部存储文件格式,Android中的数据储存之文件存储
当我们在使用各种程序时,其实际上是在和各种数据打交道,当我们聊QQ,刷微博,看新闻,其实都是在和里面的数据交互 例如在聊天时发出的消息,以及在登录时输入的账号密码,其实都是瞬时数据,那什么是瞬时数据呢 ...
- android studio 读取内存txt文件_SharedPreference与文件存储
Android常用数据存储方式有SharedPreferences存储数据(虽然还是属于内部存储).文件存储(内部,外部).SQLite数据库存储.ContentProvider存储数据.网络存储数据 ...
- 块存储、文件存储、对象存储这三者和分布式文件存储系统的本质区别
块存储和文件存储是我们比较熟悉的两种主流的存储类型,而对象存储(Object-based Storage)是一种新的网络存储架构,基于对象存储技术的设备就是对象存储设备(Object-based St ...
- Android入门(九)文件存储与SharedPreferences存储
原文链接:http://www.orlion.ga/578/ Android系统中主要提供了三种方式用于简单地实现数据持久化功能,即文件存储.SharedPreference存储以及数据库存储.当然, ...
- [ Android 五种数据存储方式之二 ] —— 文件存储数据
关于文件存储,Activity提供了openFileOutput()方法可以用于把数据输出到文件中,具体的实现过程与在J2SE环境中保存数据到文件中是一样的. 文件可用来存放大量数据,如文本.图片.音 ...
- Redis-序列化和存储模式
Redis中数据存储模式有2种:cache-only,persistence; • cache-only即只做为"缓存"服务,不持久数据,数据在服务终止后将消失,此模式下也将不存在 ...
最新文章
- java输入输出及文件_java输入输出流及文件操作
- API for org.eclipse.paho.client.mqttv3
- 华为「硬」生生把AI搞出暴力美学
- SpringBoot demo初始
- bootstrap3中select2的默认值和下拉框的禁用
- vue项目,webpack中配置src路径别名及使用
- OJ1160: 矩阵的最大值(指针专题)(C语言)
- Linux telnet命令
- ZOJ 1914 Arctic Network
- 7.2.5 dps 测试软件,魔兽世界7.2.5兽王猎DPS有什么改动测试
- 查看Jquery版本
- 这10个免费电子书网站合集赶紧收藏了!
- 南审计算机科学与技术学什么,南京审计大学是几本?是一本、二本还是三本?
- # D - Staircase Sequences
- 游戏中找CALL的万能方法
- 【C语言进阶】C语言实现通讯录
- 天载免息股票热点轮动太快
- oracle分区注意点,ORACLE分区表梳理系列(二)- 分区表日常维护及注意事项
- ROS意外崩掉解决方案
- 送给所有程序员的新年祝福新年愿望
热门文章
- php获取网页输出,PHP 利用AJAX获取网页并输出的实现代码(Zjmainstay)_PHP教程
- 【转】VS2005 CTP 版本这个CTP是什么意思
- 【转】什么是staging server
- GPS/轨迹追踪、轨迹回放、围栏控制
- 一步步编写操作系统 48 加载内核1
- JS 给某个对象添加专属方法
- 【LeetCode - 227】基本计算器 II(栈)
- 【Python学习】内置函数(不断更新)
- 【EOJ Monthly 2019.02 - D】进制转换(思维,取模,高精度大数)
- 【CodeForces - 271B 】Prime Matrix (素数,预处理打表,思维)