title author date CreateTime categories
在 P2P 文件分享应用以文件或文件段为单位的优缺
lindexi
2019-09-11 10:23:27 +0800
2019-09-11 10:17:46 +0800
P2P

在我用了好几个 P2P 文件分享应用之后,我对比了多个应用对资源的处理,可以看到基本上可以分为文件夹级的、文件级的和文件里面的一段段级的。本文将会告诉大家使用不同方法的优点和可能的坑方便大家在开发时候选择

存储冗余

用文件作为单位的,例如 UTorrent 工具,本身存储的文件就是用户下载的文件,除了用户下载文件之外只需要 Torrent 文件作为文件信息保存

而用文件段作为单位的,例如 IPFS 工具,将需要额外的空间存储文件段,因为一个不同的文件可能存在相同的文件段。例如 git 管理,将会多了一份文件大小

而文件段作为单位的,依然可以使用原文件作为资源,此时需要额外记录文件偏移量

索引

用文件作为单位的,可以直接指定文件 id 作为索引,从而拿到文件内容

用文件段作为单位的,从文件 id 拿到了文件包含的文件段,从文件包含的文件段里面的索引拿到文件段内容

传输

使用文件作为单位的,需要使用下载链机制,这样才能作为支持多个设备提供下载

使用文件段作为单位的,默认就支持让一个文件从多个设备下载,因为一个文件包含多段,每一段都可以进行不影响的下载

校验

整个文件进行校验的速度会比较慢,而使用文件段作为校验的,可以在每一段下载完成之后就进行每一段的校验

完整的 P2P 应用需要包含哪些功能

分布式文件系统 IPFS 与 FileCoin

如何在IPFS里面上传一张图片 - omnispace的博客 - CSDN博客

IPFS: BitSwap协议(数据块交换) - omnispace的博客 - CSDN博客

OpenBazaar

Fastdfs分布式文件系统 - zhongliwen1981的专栏 - CSDN博客

IPFS:建立一个静态网站 - lzl001的专栏 - CSDN博客

【我的区块链之路】- 谈一谈IPFS原理及玩法 - qq_25870633的博客 - CSDN博客

详解IPFS的本质、技术架构以及应用 - 老杨QQ122209017的博客 - CSDN博客

IPFS 使用入门 - 深入浅出区块链 - CSDN博客

2019-9-11-在-P2P-文件分享应用以文件或文件段为单位的优缺的更多相关文章

  1. Vscode配置C++运行环境(2019/1//11更)并加入bits/stdc++.h头文件

    因为重装系统,以前配置好的c++环境又没了.所以有要配置一遍. 1 下载mingw64或minw, 配置好环境变量:C://mingw64//bin;  在cmd下用g++ -v验证是否成功. 2. ...

  2. 《c# 实现p2p文件分享与传输系统》 二、 设计

    c#实现P2P文件分享与传输系统 二.设计 在上一篇文章中,介绍了P2P网络的常用模型,并确定了EasyP2P系统的框架,本文将就此设计完成它的主要结构和运作流程. 1. 首先是Tracker Ser ...

  3. 《c# 实现p2p文件分享与传输系统》 一、 模型

    c#实现P2P文件分享与传输系统 一.模型 P2P的概念大家都不陌生,也就是所谓的“点对点传输”,即不直接通过服务器,在两台或多台客户端之间传输数据,实现信息交流和资源共享.P2P技术已经发展了很多年 ...

  4. 《c# 实现p2p文件分享与传输系统》 二、 设计 - 续(NAT穿透)

    c#实现P2P文件分享与传输系统 二.设计 - 续(NAT穿透) 首先要抱歉,因为这些日子较忙,没有写文章,这个系列拖了很久,现在开始继续.  上一篇文章介绍了p2p系统Tracker Server和 ...

  5. 2019年11个javascript机器学习库

    Credits: aijs.rocks 虽然python或r编程语言有一个相对容易的学习曲线,但是Web开发人员更喜欢在他们舒适的javascript区域内做事情.目前来看,node.js已经开始向每 ...

  6. 打开随身U盘_办公专用盘 2019年11月29日

    ;;; ; 打开随身U盘_办公专用盘 2019年11月29日 ; https://www.autoahk.com/?p=16553; https://www.cnblogs.com/delphixx/ ...

  7. 'Rem EverythingAutoSetup.VBS 安装Everything的VBS脚本 2019年11月25日写

    'Rem EverythingAutoSetup.VBS 安装Everything的VBS脚本 2019年11月25日写 'Rem Everything是voidtools开发的一款本地NTFS文件和 ...

  8. 键盘和鼠标闲置超时时关闭显示器并锁定电脑桌面的AutoHotkey脚本 2019年11月24日写

    /* 键盘和鼠标闲置超时时关闭显示器并锁定电脑桌面的AutoHotkey脚本 2019年11月24日写 在电脑桌面锁定时移动鼠标就会显示登录界面,此时即使超过电源设置的时间电脑也不会关闭显示器使得屏幕 ...

  9. 背水一战 Windows 10 (11) - 资源: CustomResource, ResourceDictionary, 加载外部的 ResourceDictionary 文件

    [源码下载] 背水一战 Windows 10 (11) - 资源: CustomResource, ResourceDictionary, 加载外部的 ResourceDictionary 文件 作者 ...

随机推荐

  1. require.js实现单页web应用(SPA)

    本文转载自:https://blog.csdn.net/qq_33401924/article/details/53815922 移动端单页应用基本上是做移动端最流行的的方式了,但是对于很多前端来说, ...

  2. Java目录事件

    当文件系统中的对象被修改时,我们可以监听watch服务以获取警报.java.nio.file包中的以下类和接口提供watch服务. Watchable接口 WatchService接口 WatchKe ...

  3. 在linux 下查询某个进程被那个程序占用

    ps -ef|grep pid ps -aux | grep pid 清除linux 缓存: echo 1 > /proc/sys/vm/drop_caches

  4. python接口自动化(响应对象方法)

    python接口自动化(响应对象方法) 一.encoding作用 获取请求的编码(在不设置响应编码时,响应的信息默认使用的是请求的编码格式):r.encoding 设置响应的编码:r.encoding ...

  5. Windows跳板机无法共享本地主机剪贴板

    我的跳板机是Windows 2003 ,总是无法共享本地的剪贴板,我一般是在本地编辑SQL或者一些脚本,然后粘贴到跳板机中. 如果碰到无法共享本地剪贴板的情况,可以尝试按照以下步骤解决: 开始 -- ...

  6. @Conditional系列注解例子

    1. @Conditional 说明:指定的Condition实现类,matches方法返回true则注入bean,false则不注入 @Configuration public class Bean ...

  7. Java Selenium起步

    先将录制的脚本导出来,转成java的格式 在Eclipse中编辑并运行test     2.1 新建一个Java project: File-New-Java Project     2.2 在上一步 ...

  8. c++11 std::move()

    简单点理解,c++11 中的std::move() 函数,实际上就是将一个左值强制转换成一个右值引用数据类型,从而可以调用相应的对右值引用重载的函数. 如果使用std::move() 的返回值做为参数 ...

  9. IDEA中统计项目代码的总行数

    方法    安装“Statistic”插件步骤    打开idea设置界面,选择 plugins标签   点击下面“Browse repositories”按扭,浏览插件仓库   搜索“Statist ...

  10. NOIp2018集训test-9-1(am)

    1.最大值 可以用FWT水过去,李巨写了FWT结果中途爆int了炸了几十分好像. 我乱搞了一下把除了大数据有or的搞出来然后90,还是蛮划算的.我yy的做法: 1.xor 字典树上贪心, 一开始我打了 ...