当前位置: 首页 > news >正文

【区块链 | IPFS】IPFS节点搭建、文件上传、节点存储空间设置、节点上传文件chunk设置

一、创建ipfs节点

  • 通过ipfs init在本地计算机建立一个IPFS节点

  • 本文有些命令已经执行过了,就没有重新初始化。部分图片拷贝自先前文档,具体信息应以实物为准

ipfs init initializing IPFS node at /Users/CHY/.ipfs generating 2048-bit RSA keypair...done peer identity: QmdKXkeEWcuRw9oqBwopKUa8CgK1iBktPGYaMoJ4UNt1MP to get started, enter:ipfs cat /ipfs/QmVLDAhCY3X9P2uRudKAryuQFPM5zqA3Yij1dY8FpGbL7T/readmecd /.ipfscd ~/.ipfscd /.ipfs ls blocks datastore version config keystore $ open ./
  • 执行ipfs init初始化节点之后,会生成一个.ipfs的文件夹,用于存储相关的信息,比如节点ID、环境配置信息、数据存储等
  • 如果使用的是MAC电脑,使用shift+command+. 可以查看隐藏文件

  • ​通过ipfs id查看创建的节点id的信息

二、启动节点服务器

  • 使用命令ipfs daemon启动节点服务器
  • 一旦启动当前界面会处于监听状态,需要新建标签页

三、简单验证

  • 使用如下命令,进行简单测试

    ipfs cat /ipfs/QmYwAPJzv5CZsnA625s3Xf2nemtYgPpHdWEz79ojWnPbdG/readme

  • 浏览器输入下面的网址:http://localhost:5001/webui会看到一个漂亮的UI界面

四、相关问题详解

1. ipfs的存储位置

  • IPFS的数据存储,个人用户的数据存储在自己个人的硬盘上,也就是本地硬盘存储。存储后,会在IPFS网络广播,“我存储哈希为Qm...的数据了”,因为哈希的唯一性,如果数据的分割方法一定,那么同样的数据在网络存储中只会有一份,也就是只在本地节点存储。当有用户检索该数据时,检索数据的hash值就是key,节点会首先在DHT表(key/value存储)中查询有无该key,如果没有,到与key异或距离最近的K桶里查找,如果该K桶中的某个节点有key对应的value则返回,否则返回它认为存有value值的最可能节点,以此递归,最终找到key对应的value。然后请求节点与value(也就是节点ID)建立连接,并请求数据,同时将该key/value键值对存储到自己的DHT表中。请求节点将接收到的数据存储到ipfs缓存中,数据检索成功。该请求节点在缓存数据有效期内,同样可以为ipfs网络,提供该数据,作为原始数据的备份。

2. ipfs的冗余备份措施

  • IPFS采用了Erasure coding的冗余备份措施,集群中有n份原始数据和m份校验数据,即共有n+m份备份数据。

3. 修改节点默认存储空间

  • ipfs节点默认存储空间为10个G

方式一:可打开终端执行下面的命令

export EDITOR=/usr/bin/vim ipfs config edit

  • 找到下图使用红色的框标定的内容,修改自己想要的大小
  • PS:输入i可以开始编辑,编译完毕后按esc键,再输入:,再次输入wq保存并且退出

方式二 采用web界面进行修改

  • 修改对应的信息,然后点击保存

ipfs的节点掉线,对于整个组织的影响

  • IPFS的容错机制会保证数据被复制了足够数量并存放在不同的地区,即使某一个地方的数据由于不可抗力的因素被完全销毁,通过其他地区的备份也可以实现完整恢复数据,极大的保证了存储在IPFS上的数据的安全性
  • 采用MerkleDAG,因为它具有以下特点:1.内容可寻址:所有内容都是被多重hash校验和来唯一识别的,包括links。2.无法篡改:所有的内容都用它的校验和来验证。如果数据被篡改或损坏,IPFS会检测到。3.重复数据删除:重复内容并只存储一次。
    在IPFS网络中,数据的存储可能是有重复的。重复的数量与用户上传的时候采用的IPFS进行分块的方法有关。
  • 之前提到过数据在IPFS存储是以块的形式存储的。在ipfs提供的数据分割方式有很多种。在ipfs源码种core/commands/add.go代码中描述了切割的方法:
  1. 默认模式,块的大小是256kb,也就是256 * 1024 bytes,对应的size=262144。命令不需要加参数,即ipfs add 文件。

  2. 指定块大小模式。命令是ipfs add --chunker=size-1000。其中后边的1000可以是任意小于262144的数。

  3. rabin可变块大小切割模式。命令是ipfs add --chunker=rabin-[min]-[avg]-[max] 文件。其中min,avg,max的值分别值最小块大小,平均块大小,最大块大小的意思,值在小于262144自行设定。

    The chunker option, '-s', specifies the chunking strategy that dictates how to break files into blocks. Blocks with same content can be deduplicated. The default is a fixed block size of 256 * 1024 bytes, 'size-262144'. Alternatively, you can use the rabin chunker for content defined chunking by specifying rabin-[min]-[avg]-[max] (where min/avg/max refer to the resulting chunk sizes). Using other chunking strategies will produce different hashes for the same file.

    ipfs add ipfs-logo.svg ipfs add --chunker=size-2048 ipfs-logo.svg ipfs add --chunker=rabin-512-1024-2048 ipfs-logo.svg

  • 同一个文件存储在ipfs中,因为存储是选用的文件切割方法不同,返回的hash值却不一样。所以说IPFS的块存储没有重复的,而IPFS块文件拼凑的数据可能有重复的。也就是说同一个文件可以根据不同的文件切割方法在IPFS网络中重复的存储多次。

如上图,测试了一个6.8K的文件存储,存储设定1024B为一个分片,分片完后,可以查到这个文件分为了7个分片。 

  • 备份是如何实现的呢?假如一部非常火的电影,大家都习惯性的将该电影存储到自己的电脑E盘或其它硬盘存储中,全世界如果有1亿的人存储了这个电影,这不是对存储的极大浪费吗?在ipfs网络中,该电影只被存储在一个节点中,当有用户需要读取的时候,会产生新的备份。就是谁使用数据,这个数据就会复制到谁那里。当一个节点加入IPFS网络时,这个节点会提供一部分硬盘空间(缺省为10G,可以配置)给整个网络使用。那么通常情况下,在存储文件的时候,您自己提供的这部分硬盘空间总是最快的,因为不需要跨网。当存储完毕后,网络上任意节点都可以访问这个文件。当另一个节点访问的时候,那个节点往往会复制一份您的数据到他的缓存空间。这样整个网络中就有两份拷贝了。试想,当有很多人对这个文件感兴趣,那么网络中的拷贝数会越来越多。
  • 需要提出的是:拷贝一般都是缓存,也就是说是临时存储的。时间一长就被自动删除掉了。这种临时缓存非常好地解决了分布式数据分发的问题,比如说一个社会热点往往呈现出预热期、火热期和退潮期等阶段,利用IPFS,数据的分布和拷贝数与这些时期是完全匹配的。访问的人越多,拷贝数就越多,但热度下来了,拷贝数就会降下来,从而自然地实现空间利用率和存取效率的平衡。如果想让这个文件永久存储,那么必须将其设为固定的样式,即存储在硬盘中。

4. ipfs的使用

上传txt文件

上传其他格式的文件

  • pdf
  • docx
  • jpg
  • mp4
  • mp3

注意事项

  1. 对于下载的文件需要进行格式的准换,否则不可用。这个转化的方式可以手工进行转化,也可以使用命令的方式。
  2. 也可以指定下载的文件名称,加上-o 文件名,也可以加上-a : 压缩成.tar格式,-C :压缩成.gz格

pdf

ipfs get QmZJBKrLFPvn8zEatZsxSJTtJkCFm4YeMwChDLRPPPerZ6 -o 1.pdf

  • 使用命令open hh.pdf 打开pdf文件,此处open的用法是Linux自带功能,和ipfs无关

docx

mp3

​ jpg

mp4

上传整个文件夹

  • 此处上传的整个文件夹里面的文件和先前测试使用的是相同的文件,所以他们的哈希值是一致的,这个就是ipfs要求的避免相同的文件被用户上传多次。

查看上传的文件中包含的子文件

查看被引用的hash

  • 被引用的hash概念:一般指文件夹下面有多少个文件,这个文件夹的名称就被引用多少次,hash就是应用该文件名的文件hash

​如果上传的是一个文件夹,那么将文件夹拉回到本地,里面的文件是正常的存储格式,无需进行格式转化

​ 进入web可视化界面,将哈希序列输入到搜索框,进行文件的查询,如果文件不支持预览,需要点击downloading进行下载查看

发现的问题

  • 使用root用户和普通用户,使用ipfs id查看自己的节点信息,还不一样。

​ 而且,这两个节点之间还不能互相交换文件,不隶属于同一个集群。

参考链接

  • 使用ipfs完成一个图片上传的案例
  • IPFS:分布式文件存储
  • IPFS

相关文章:

【区块链 | IPFS】IPFS节点搭建、文件上传、节点存储空间设置、节点上传文件chunk设置

一、创建ipfs节点 通过ipfs init在本地计算机建立一个IPFS节点 本文有些命令已经执行过了,就没有重新初始化。部分图片拷贝自先前文档,具体信息应以实物为准 ipfs init initializing IPFS node at /Users/CHY/.ipfs generating 2048-bit RSA keypair.…...

【autodesk】浏览器中渲染rvt模型

使用Forge完成渲染 Forge是什么 为什么能够渲染出来rvt模型 Forge是由Autodesk开发的一套云端开发平台和工具集。在Forge平台中,有一个名为"Model Derivative"的服务,它可以将包括RVT(Revit)在内的多种BIM&#xff08…...

Python超入门(1)__迅速上手操作掌握Python

# 1.第一个代码:输出语句 # 1.第一个代码:输出语句 print("My dogs name is Huppy!") print(o----) print( ||| ) print("*" * 10) """ 输出结果: My dogs name is Huppy! o----||| ********** "&…...

后端面试话术集锦第 十四 篇:go语言面试话术

这是后端面试集锦第十四篇博文——go语言面试话术❗❗❗ 1. go数组、切片、扩容 go的数组和切片都是用来存储相同类型的数据集合。 数组是存储固定大小的集合,且为值引用。 但切片是存储无固定大小的集合,且为引用类型。 切片有三个属性,分别为指向指针的数组array,数组…...

Oralce集群管理-19C RAC 私有网络调整为BOND1

1 尝试在线添加私有网络的新接口 是否成功。 使用oifcfg命令在线添加新的网卡接口,在还没有配置bond1的条件下 也是可以添加成功的。 [gridorcldb1 ~]$ oifcfg getif eno3 192.168.224.0 global public ens3f0 10.2.0.0 global cluster_interconnect,asm eno…...

洛谷 Array 数论

题目: 对于长度为n的数组A,A中只包含从1到n的整数(可重复)。如果A单调不上升或单调不下降,A就可称为美丽的。 找出在长度为n时,有几个美丽的A。 思路: 这是一道数论题。 我们先找找“单调不递…...

简明SQL条件查询指南:掌握WHERE实现数据筛选

条件查询是用于从数据库中根据特定条件筛选数据行的一种方式&#xff0c;它避免了检索整个表中的数据。通常&#xff0c;使用 WHERE 子句来定义过滤条件&#xff0c;只有符合这些条件的数据行才会被返回。 SQL中的运算符有&#xff1a;、!、<、> 等&#xff0c;用于进行…...

通过HbaseClient来写Phoenix表实现

由于数据存储在Hbase上&#xff0c;并且上层使用了Phoenix来读写数据。并且由于数据的列字段不固定&#xff0c;并且可能由于Hbase表列和Phoenix的表列字段不一致&#xff0c;使用Phoenix写入的数据会导致写出报错的问题出现。所以这里直接使用HbaseClient写入到Hbase表中&…...

uniapp qiun charts H5使用echarts的eopts配置不生效

原因是&#xff1a;使用web的要设置 echartsH5 :echartsH5"true" <template><view class"charts-box"><view class"chart-title"> 趋势</view><qiun-data-chartstype"column":eopts"eopts":cha…...

嵌入式Linux驱动开发(LCD屏幕专题)(三)

1. 硬件相关的操作 LCD驱动程序的核心就是&#xff1a; 分配fb_info设置fb_info注册fb_info硬件相关的设置 硬件相关的设置又可以分为3部分&#xff1a; 引脚设置时钟设置LCD控制器设置 2. 在设备树里指定LCD参数 framebuffer-mylcd {compatible "100ask,lcd_drv&qu…...

MySQL视图用户管理

文章目录 视图视图的规则用户用户信息创建用户删除用户修改密码 用户权限给用户授权回收权限 视图 视图是一个虚拟表&#xff0c;其内容由查询定义。同真实的表一样&#xff0c;视图包含一系列带有名称的列和行数据。视图的数据变化会影响到基表&#xff0c;基表的数据变化也会…...

我发现了一个很好看的字体,霞鹜文楷!如何换windows和typora字体?

1、字体 官方地址如下&#xff0c;下载也很简单。 https://github.com/lxgw/LxgwWenKai 有1W多的stars。 方式&#xff1a; 直接打包下载。下载不来&#xff0c;可以联系我。 然后ttf的文件&#xff0c;全部安装就行了。 reg save "HKCU\Control Panel" .\res…...

微软8月系统更新引发问题:虚拟内存分页文件出现错误

微软的八月系统更新引发了一系列问题&#xff0c;其中包括“UNSUPPORTED_PROCESSOR”蓝屏错误和文件管理器故障。尽管微软已经修复了前者&#xff0c;但据国外科技媒体Windows Latest报道&#xff0c;仍有用户反馈在非微星设备上出现“fault in nonpaged area”蓝屏错误。 如果…...

swiper删除虚拟slide问题

在存在缓存的情况下&#xff0c;删除较前的slide&#xff0c;会出现当前slide与后一个slide重复出现的情况 假设当前存在5个slide&#xff0c;且这5个slide已缓存&#xff0c;则删除slide2后&#xff0c;仍为5个slide&#xff0c;且slide2的内容变为slide3的内容&#xff0c;此…...

FPGA实战小项目2

基于FPGA的贪吃蛇游戏 基于FPGA的贪吃蛇游戏 基于fpga的数字密码锁ego1 基于fpga的数字密码锁ego1 基于fpga的数字时钟 basys3 基于fpga的数字时钟 basys3...

一些关于完整小程序项目的优秀开源

转载自&#xff1a; 35个项目&#xff0c;开源&#xff0c;开源&#xff01; (qq.com) 那几本霸占我休息时间的PDF&#xff01; (qq.com) 13个超强的 SpringBoot 实战项目 &#xff08;还不赶紧收藏起来&#xff09; (qq.com) 用SpringBoot开发一个人脸识别系统&#xff01…...

Windows模拟器推荐

物是人非事事休&#xff0c;欲语泪先流 Windows模拟器推荐 如果你需要在 Windows 操作系统之外运行 Windows 应用程序或测试不同版本的 Windows&#xff0c;有几个 Windows 模拟器和虚拟机软件可供选择。以下是一些常用的 Windows 模拟器和虚拟机软件&#xff1a; VirtualBox&…...

搭建RabbitMQ消息服务,整合SpringBoot实现收发消息

作者主页&#xff1a;Designer 小郑 作者简介&#xff1a;3年JAVA全栈开发经验&#xff0c;专注JAVA技术、系统定制、远程指导&#xff0c;致力于企业数字化转型&#xff0c;CSDN博客专家&#xff0c;蓝桥云课认证讲师。 目录 一、前言1.1 什么是消息队列1.2 RabbitMQ 是什么1.…...

Web framework-Gin(二)

目录 一、Gin 1、Ajax 2、文件上传 2.1、form表单中文件上传(单个文件) 2.2、form表单中文件上传(多个文件) 2.3、ajax上传单个文件 2.4、ajax上传多个文件 3、模板语法 4、数据绑定 5、路由组 6、中间件 一、Gin 1、Ajax AJAX 即“Asynchronous Javascript And XM…...

【聚类】K-Means聚类

cluster&#xff1a;簇 原理&#xff1a; 这边暂时没有时间具体介绍kmeans聚类的原理。简单来说&#xff0c;就是首先初始化k个簇心&#xff1b;然后计算所有点到簇心的欧式距离&#xff0c;对一个点来说&#xff0c;距离最短就属于那个簇&#xff1b;然后更新不同簇的簇心&a…...

【Linux】shell脚本忽略错误继续执行

在 shell 脚本中&#xff0c;可以使用 set -e 命令来设置脚本在遇到错误时退出执行。如果你希望脚本忽略错误并继续执行&#xff0c;可以在脚本开头添加 set e 命令来取消该设置。 举例1 #!/bin/bash# 取消 set -e 的设置 set e# 执行命令&#xff0c;并忽略错误 rm somefile…...

java_网络服务相关_gateway_nacos_feign区别联系

1. spring-cloud-starter-gateway 作用&#xff1a;作为微服务架构的网关&#xff0c;统一入口&#xff0c;处理所有外部请求。 核心能力&#xff1a; 路由转发&#xff08;基于路径、服务名等&#xff09;过滤器&#xff08;鉴权、限流、日志、Header 处理&#xff09;支持负…...

反向工程与模型迁移:打造未来商品详情API的可持续创新体系

在电商行业蓬勃发展的当下&#xff0c;商品详情API作为连接电商平台与开发者、商家及用户的关键纽带&#xff0c;其重要性日益凸显。传统商品详情API主要聚焦于商品基本信息&#xff08;如名称、价格、库存等&#xff09;的获取与展示&#xff0c;已难以满足市场对个性化、智能…...

前端倒计时误差!

提示:记录工作中遇到的需求及解决办法 文章目录 前言一、误差从何而来?二、五大解决方案1. 动态校准法(基础版)2. Web Worker 计时3. 服务器时间同步4. Performance API 高精度计时5. 页面可见性API优化三、生产环境最佳实践四、终极解决方案架构前言 前几天听说公司某个项…...

STM32F4基本定时器使用和原理详解

STM32F4基本定时器使用和原理详解 前言如何确定定时器挂载在哪条时钟线上配置及使用方法参数配置PrescalerCounter ModeCounter Periodauto-reload preloadTrigger Event Selection 中断配置生成的代码及使用方法初始化代码基本定时器触发DCA或者ADC的代码讲解中断代码定时启动…...

Matlab | matlab常用命令总结

常用命令 一、 基础操作与环境二、 矩阵与数组操作(核心)三、 绘图与可视化四、 编程与控制流五、 符号计算 (Symbolic Math Toolbox)六、 文件与数据 I/O七、 常用函数类别重要提示这是一份 MATLAB 常用命令和功能的总结,涵盖了基础操作、矩阵运算、绘图、编程和文件处理等…...

HashMap中的put方法执行流程(流程图)

1 put操作整体流程 HashMap 的 put 操作是其最核心的功能之一。在 JDK 1.8 及以后版本中&#xff0c;其主要逻辑封装在 putVal 这个内部方法中。整个过程大致如下&#xff1a; 初始判断与哈希计算&#xff1a; 首先&#xff0c;putVal 方法会检查当前的 table&#xff08;也就…...

A2A JS SDK 完整教程:快速入门指南

目录 什么是 A2A JS SDK?A2A JS 安装与设置A2A JS 核心概念创建你的第一个 A2A JS 代理A2A JS 服务端开发A2A JS 客户端使用A2A JS 高级特性A2A JS 最佳实践A2A JS 故障排除 什么是 A2A JS SDK? A2A JS SDK 是一个专为 JavaScript/TypeScript 开发者设计的强大库&#xff…...

用递归算法解锁「子集」问题 —— LeetCode 78题解析

文章目录 一、题目介绍二、递归思路详解&#xff1a;从决策树开始理解三、解法一&#xff1a;二叉决策树 DFS四、解法二&#xff1a;组合式回溯写法&#xff08;推荐&#xff09;五、解法对比 递归算法是编程中一种非常强大且常见的思想&#xff0c;它能够优雅地解决很多复杂的…...

数据分析六部曲?

引言 上一章我们说到了数据分析六部曲&#xff0c;何谓六部曲呢&#xff1f; 其实啊&#xff0c;数据分析没那么难&#xff0c;只要掌握了下面这六个步骤&#xff0c;也就是数据分析六部曲&#xff0c;就算你是个啥都不懂的小白&#xff0c;也能慢慢上手做数据分析啦。 第一…...