ipfs的上传数据的过程大家清楚吗?接下来我先讲解下。以单个数据上传为例子。 前提是大家本机已安装了ipfs可执行程序。
1.在当前目录下,创建一个文件foo.txt,然后执行
ipfs add foo.txt
得到一传hash值。过程如下图:
分析这一步具体发生了什么?
ipfs add命令是将文件foo.txt存储到了本地,并且范围一个hash值,这个hash值就是这个文件的指纹。
2.启动节点,连入ipfs网络
开启一个新的终端,启动命令是
ipfs daemon
显示如下图:
那么这一步具体发生了什么?
通过ipfs daemon命令启动后,我的节点就连入ipfs网络了,那么我的本地数据就可以共享到整个网络中了。但是我的文件hash值只有我自己知道,别人根本没法访问,所以foo.txt数据现在只在我的节点本地存储着,其他的网络节点都没有存储你的数据。如果,我关掉节点,那么ipfs网络中foo.txt数据就不存在了。
说白了,ipfs daemon启动后,就是告诉全网络,我有foo.txt数据了,快来访问啊。
3.我通过网页访问foo.txt数据,使其存储在ipfs网络中,而不是单单存储在我的本地。 切记:ipfs daemon不能停掉。
我在网页中输入:https://ipfs.io/ipfs/QmTzeEKzcweAsSw2mQbcKLgm6TWqbuVCqZAHk5J9543CVZ
等一会后,访问成功了,那么数据就存储到ipfs网络中了,即使我停掉本机节点(关掉ipfs daemon终端),数据依然可以在网页中得到访问。
综上,通过上边三步,我的数据就存储到ipfs网络中了,任何人都可以通过访问https://ipfs.io/ipfs/QmTzeEKzcweAsSw2mQbcKLgm6TWqbuVCqZAHk5J9543CVZ得到我的foo.txt的数据。
从上边的存储过程来看,第一步和第二步属于存储数据的准备工作,第三步才是真正的存储过程。存储的速度是对应大文件来说的,小文件与传统的http没有差别,大文件明显是ipfs上传的速度快。
ipfs的大文件(比如说时1G文件)在存储时会将大文件打碎,形成多个文件碎片,每个碎片是256kb,这个碎片也会被生成一个hash值。上传过程是并发进行的,所有碎片同时向网络提供,存储节点会根据自己的wantlist表存储对应的碎片。而传统的http存储,存储节点是中心服务器,存储是以流的形式将文件全部存储。
这样一比较,ipfs是很多存储节点对大数据文件的碎片同步开始存储,当所有碎片文件都被存储完后,存储工作完成。这速度肯定是要比http存储快很多的。就像有一个活,几个人一起分摊干,肯定比1个人自己干要快的多的。
IPFS会将一些大文件打散,切成一个个的小块,这样不仅可以做到从一台服务器上下载文件,也可以同时从数百台服务器进行同步下载。这极大的加快了访问速度。