使 dApp 直接与 IPFS 对话(通过 IPFS API)以存储数据(应用程序数据或文件)并获取数据。即,用 IPFS 完全替换 API 层似乎是可能的,但是这种方法有什么问题吗?我们可以完全没有 API 吗?
取决于你想做什么。但是使用内容寻址存储、IPNS 和 ipfs pubsub,您拥有编写一些非常复杂的应用程序的所有组件,这些应用程序不使用任何集中式服务。
特别是 pubsub 仍处于试验阶段。但是最新版本的 IPFS 0.4.18 包含一个新的 pubsub 实现,它应该更具可扩展性。
如果第 1 点是可能的,访问文件数据很简单,但如何访问应用程序。IPFS 中的数据(例如:推荐的存储和检索结构是什么,如何存储不同的用户数据等)?
您只需在您控制的 IPNS 密钥下发布您的应用程序。假设我们在这里讨论的是 javascript/typescript 应用程序,您可以像往常一样使用 webpack 之类的工具打包它们,然后将最终工件放在 IPFS 上并使用 IPNS 发布。
我了解添加到 IPFS 的数据是公开可用的,我们如何保护这些数据并使其仅对特定客户可用?据我了解,IPFS 中没有公钥/私钥机制?
每个 IPFS 节点都有一个公钥/私钥对。您可以使用它来加密节点的消息或签署来自节点的消息。这在 IPNS 中使用。每个节点可以有多个密钥对。
当我们在 IPFS 中存储视频时,为了在客户端流式传输视频,我们是否需要使用 CDN,我不确定如何在分散的解决方案中做到这一点。
IPFS 基本上是一个 CDN。因此,您不必使用额外的 CDN。您还可以使用Cloudflare IPFS 网关。
目前正在努力使 IPFS 非常有效地分发视频等超大文件。已经有应用程序在使用它,例如D.Tube
当某些事件被触发或由客户端应用程序命令时,IPFS 中是否有任何选项可以自动执行任务(例如:运行脚本)?
不,IPFS/libp2p 基本上是分布式网络的网络堆栈。如果您想要诸如自动执行由事件触发的脚本之类的功能,您要么必须自己在 IPFS pubsub 之上编写它,要么使用更高级的中间件,例如Orbit DB。
从节点查找和获取数据时,IPFS 是否存在任何已知的性能问题?
是的。IPFS 还很年轻。例如,当前正在处理的来自许多对等方的大文件的分发存在问题。许多公司在生产中使用 IPFS,但您将生活在最前沿并且偶尔会遇到问题。
关于可用于实现上述方法的工具和框架有什么建议吗?
如果不了解总体目标和开发人员的技能水平,很难回答。如果你想获得最大的性能,你将不得不直接使用 IPFS 或 libp2p。首先,建立在 OrbitDB 之类的东西上可能是有意义的。
还有很多JS-IPFS入门的例子。