IPFS:为什么要用IPFS存储大量数据?

为什么要用ipfs存储大量数据?ipfs最吸引人的特点是什么?哪些地方是大家担心的?在ipfs的官方论坛 discuss.ipfs.io,团队针对人们为什么使用或不使用ipfs来存储大量数据的原因做了一个调查。我们整理和翻译了其中一些爱好者或关注者的回答,大家也可以在评论区留言自己的想法。
flyingzumwalt(matt zumwalt):
针对有大量数据(几十tb至几十pb)需要存储在ipfs上的用户,我们正在做一轮采访,以便了解他们的诉求。对于这些有大量数据处理需求的用户来说,ipfs吸引他们的关键因素以及他们的忧虑是什么?我们有一些初步猜测想在采访中验证,也想听听大家的想法,看有没有其他因素我们没有考虑到的。
以下是我认为ipfs会吸引人们使用的几个特点:
内容寻址(content addressing)
在不损害数据完整性的情况下,移动、复制和重新提供数据的能力
无需复制(或引用)整个数据集,可以子选择其中一部分的能力
为版本控制提供基础(内容寻址的),但又独立于版本控制元数据结构
支持高效的动态聚合和来自多个位置的数据分析
下面几点是我认为人们在评估ipfs时会考虑的因素:
可靠性(reliability)
可扩展性(scalability)
安全性(security)
性能(performance)
大家有什么要补充的吗?
tkklein(tomk):
机构会有某种存储虚拟化技术,他们会想要把ipfs接入进去。他们还会有内容和数据管理系统(hadoop之外),理论上不需要了解ipfs,但是可能还需要进一步确定。举个例子,我在研究视频数据(特别是所有随身摄像头/仪表盘生成的相机数据)。这些数据没有办法保存太久,因为存储成本太高。如果不能使用一种现有的接口,政府不会额外雇人来使用ipfs。
eocarragain(eoghan o carragain)
我想补充两点:
成熟和稳定性
应用度和整合度(比如整合到浏览器和操作系统)
jeiros(juan eiros):
我最近才知道和开始了解ipfs,在我看来,ipfs对计算机科学的再现性(reproducibility)可能有着非常积极的作用。
在我的特定研究团体,大量(多达10tb)二进制文件通过非常耗时的模拟产生。因此恰当地保存这些文件非常重要(一旦丢失文件,意味着得重新模拟,耗时长达几个月)。把文件分享给同事也很重要,不幸的是,在实际操作中这很难实现。比如说,我在欧洲工作,就无法下载存储在斯坦福数据库几tb的模拟数据集,要花很长的时间才能办到。
就我目前了解到的ipfs相关信息来说,我觉得重点是能通过联系到网络中离你最近的人,从而提高文件分享速度,而不再是基于一个中央储存库。但同时我也了解到这样就不能再复制了,网络中的每个节点只存储它“感兴趣”的内容。那么,在我上面提到的例子中,ipfs如何决定由谁来存储这些大量数据集?复制这些数据是不是很烧钱?如果是的话,就会回到我现在面临的情况:在全球范围内下载一个巨大的数据集是办不到的。
looccm(matt mccool):
大多数公司把大型工作负载存储在 emc isilon 或 netapp,你上面提到的关于使用ipfs时会考虑的4点因素,这两者都有局限性。我的工作是存储销售这块,几乎所有的顾客都想把大量的工作档案存储在 ams (亚马逊旗下云计算服务平台)或 azure(微软云计算服务平台) – 这总是比较容易实现。因此,档案存储用例会是一个有趣的切入点,尤其是在数据生成量达到pb级的行业,比如媒体或研究领域。
kehao95(kehao):
我在一家网络用户行为研究公司工作,类似于谷歌分析(google analysis)。跟踪代码每天产生几tb的数据,我们把数据存储在 aws s3,设置有效期限,把总量控制在几百tb内。我们正在寻求减少数据重复的方法,以节约成本。每天有数百万个时域(session),一旦配置js-ipfs后,意味着整个网络上会有数百万个ipfs节点(短期的,几秒到几十分钟)。我相信这能释放ipfs的最大潜力。
当用户访问一个站点时,我们监看和记录网页产生的所有dom更改,保存 session,便于之后用于分析。目前我们需要这些东西:
版本控制(version control)或ipfs白皮书6.3中提到的树对象(the tree object)。现在我们用的是一种差异算法来计算dom更改,把原始数据和差异都存入文档。如果ipfs的树对象能实现,我们就能减少很多重复内容,节约大量空间。
可靠的push (或上传) 方法。我用 pubsub(发布/订阅模式)演示过,似乎还无法保证内容接收。因为标签可能随时关闭,我们需要在微秒之内将数据push到后台。
flyingzumwalt(matt zumwalt):
我的理解是,它允许我们在一个地点随机且可根据需求更改的广义系统中,可以把一切事物都看做节点、服务和工作者 -- 比如,它可以让你模糊服务端和客户端之间的区别。取代了强制将服务端和客户端进行二分的方式,让你可以在一台接近数据的设备或一台距离很远的设备上进行分析,或者将数据复制到一个新的地点进行分析。某种程度上这样简化了你的代码基,因为你可以少编写一些能让客户端应用、工作者重复利用的库和服务,无论他们身在何处。