如何在添加到IPFS的文件中按CID引用特定的块?

时间:2019-10-25 05:20:53

标签: ipfs

如果我已经将大约10mb的文件添加到IPFS,并且这些文件是由成千上万条单独的日志消息组成的日志,那么有没有办法我可以直接引用这些单独的日志消息?

似乎自定义分块器可能是实现此目的的一种方法?

例如,也许分块器可以在每个日志消息中分块并在那一点执行其他按消息的逻辑?

还是重载了分块器的目的?

2 个答案:

答案 0 :(得分:0)

听起来您正在尝试做的事情是具有一些语义来访问某些数据集。您遇到的是UnixFS(IPFS默认使用文件编码)对您的特定语义一无所知。

虽然您可以决定使用自定义的分块器,然后对组成UnixFS对象的块进行寻址,但您可能更容易制作一个新的IPLD对象MyLog,它是日志条目的列表。然后,您将可以查询各个日志条目。

这里的基本方法基本上是创建一个用于存储数据的新数据结构。是否选择使该数据结构与UnixFS兼容取决于您自己。

答案 1 :(得分:0)

我正在研究IPLD,后者提供了IPFS之下的数据结构,并且我还在研究UnixFSv2,后者是IPFS的文件和目录数据结构的下一个版本。

我建议您采用几种方法来解决您所描述的问题,而您要采用哪种方法则取决于原始帖子中尚不明确的几件事,因此我将尝试描述每种方法及其权衡取舍

首先,我不建议使用其他分块器。 IPFS没有出色的API来处理和处理文件的各个块,因此我不确定您是否会从文件中得到想要的东西,而最终只是将所有内容从块接口中拉出,这可能不包括您选择IPFS的许多功能的优点。

1)如果您真正想要的是拥有一个指向文件的URL的网页,那么最简单的方法就是按行号引用普通文件并放入IPFS之上的一些代码。这也将使用最少的存储空间。

如果您确实需要指向特定日志项的基于哈希的不可变链接,则有几种选择。

2)在每个日志项的IPFS中创建一个单独的文件。这似乎有点过分,但与您的分块器方法并没有太大区别。您会在图中从文件元数据到原始数据有一个额外的链接,但是作为回报,您将获得所有IPFS API来将每个文件作为文件进行访问,并且可以将目录视为结构作为良好的索引层次结构。

这将增加存储需求。多少取决于日志行的大小和哈希函数的大小。如果您的行大约是哈希函数大小的两倍,那么您将需要大约50%的存储空间。

侧面说明:在UnixFSv2(正在开发中,尚未准备就绪)中,您可以执行此操作而无需图形中的另一个链接,因为我们支持将少量二进制数据直接内联到文件元数据中,因此存储需求最终会减少一些。

3) 如果您的日志项实际上是结构化数据,例如您提取后而不是将其保留为字符串后会变成JSON,或者原始数据已经结构化并被扁平化为日志行,您可能需要考虑直接使用IPLD。

这种方法需要更多的工作,而工具的开发却较少(IPLD比IPFS是一个年轻的项目)。但是,最终将需要输入和输出结构化数据,并且仍然可以通过使用DAG API或Block API将IPFS用作数据存储。

如何完成此操作很大程度上取决于您使用的语言,并且需要大量的时间投入(实际上是在设计新的自定义数据结构)。我对此表示怀疑,这是您的用例的正确选择,但我想将其作为一种选择,以防万一。如果您想探索该项目,请签出该项目并记录更多详细信息,我们可以为您提供帮助,但这肯定是更多工作;)https://github.com/ipld