【IPFS相关】OrbitDB:无服务器、分布式、对等的数据库

本指南将使您熟悉在JavaScript应用程序中使用OrbitDB。OrbitDB和IPFS都可以在Node.js应用程序和浏览器应用程序中工作。

【IPFS相关】OrbitDB:无服务器、分布式、对等的数据库

本文由IPFS原力区收集译制,版权所属原作者

OrbitDB是一个无服务器的分布式对等数据库。

OrbitDB使用IPFS作为它的数据存储,IPFS Pubsub可以自动同步数据库。

  本指南将使您熟悉在JavaScript应用程序中使用OrbitDB。OrbitDB和IPFS都可以在Node.js应用程序和浏览器应用程序中工作。  

【IPFS相关】OrbitDB:无服务器、分布式、对等的数据库

  目录单  
  • 背景
  • 安装
  • 设置
  • 数据库创建
  • 地址

清单

  • 身份

  • 访问控制   

公开数据库

  • 添加一个条目
  • 得到一个条目
  • 持久性
  • 复制数据库
  • 自定义商店
  背景 OrbitDB是一个点对点数据库,这意味着每个点都有一个特定数据库的实例。在对等点之间复制数据库,在任何对等点更新时自动生成数据库的最新视图。也就是说,数据库被拉到客户端。   这意味着每个应用程序都包含它们正在使用的完整数据库。与客户端-服务器模型相比,这进而改变了数据建模,客户端-服务器模型通常为所有条目提供一个大数据库:在OrbitDB中,数据应该根据数据的访问权限存储、“分区”或“分片”。例如,在一个类似twitter的应用程序中,tweets不会保存在一个全局“tweets”数据库中,数百万用户并发地将tweets写入该数据库,而是每个用户都有自己的tweets数据库。跟踪用户,订阅用户的feed。复制他们的feed数据库。   OrbitDB支持多种数据模型(请参阅下面的详细信息),因此开发人员有多种方法来构造数据。结合对等范式,数据建模是构建可伸缩分散应用的重要因素。 (这可能不是直观的,或者您可能不确定最好的方法是什么,但我们很乐意帮助您决定您的数据建模和应用程序需求)   安装 npm安装orbito -dbipfs: 【IPFS相关】OrbitDB:无服务器、分布式、对等的数据库 设置 在你的程序中需要OrbitDB和IPFS,创建实例: 【IPFS相关】OrbitDB:无服务器、分布式、对等的数据库 orbitdb现在是我们可以用来与数据库交互的orbitdb实例。   创建一个数据库 首先,选择要使用的数据模型。可用的数据模型如下:
  • Key-Value
  • Log(只能添加日志)
  • Feed(与日志数据库相同,但是可以删除条目)
  • Documents (存储索引JSON文档)
  • Counters
  然后,创建一个数据库实例(在本例中我们将使用Key-Value数据库): 【IPFS相关】OrbitDB:无服务器、分布式、对等的数据库   地址 创建数据库时,OrbitDB会给它分配一个地址。地址由三部分组成: 【IPFS相关】OrbitDB:无服务器、分布式、对等的数据库

第一部分/orbitdb指定了正在使用的协议。

第二部分是IPFS multihash Qmd8TmZrWASypEp4Er9tgWP4kCNQnW4ncSnvjvyHQ3EVSU,它是一个数据库清单,其中包含数据库的名称和类型等信息,以及一个指向访问控制器的指针。最后一部分,first-database,是数据库的名称。

  为了用对等点复制数据库,您需要向其他对等点提供地址,以便它们开始复制数据库。   数据库地址可以作为db访问。数据库实例地址: 【IPFS相关】OrbitDB:无服务器、分布式、对等的数据库   例如: 【IPFS相关】OrbitDB:无服务器、分布式、对等的数据库 清单 地址的第二部分IPFS multihash Qmdgwt7w4uBsw8LXduzCd18zfGXeTmBsiR8edQ1hSfzcJC是数据库的清单。它是一个IPFS对象,包含关于数据库的信息。   数据库清单可以从IPFS获取,它看起来是这样的: 【IPFS相关】OrbitDB:无服务器、分布式、对等的数据库   身份 数据库中的每个条目都由创建该条目的人签名。标识(包括用于对条目签名的公钥)可以通过数据库实例的标识成员变量访问: 【IPFS相关】OrbitDB:无服务器、分布式、对等的数据库 创建一个标识 【IPFS相关】OrbitDB:无服务器、分布式、对等的数据库 这个标识可以在OrbitDB中使用,方法是在options对象中作为参数传递: 【IPFS相关】OrbitDB:无服务器、分布式、对等的数据库 该标识还包含证明拥有id和OrbitDB公钥的签名。这包括允许在OrbitDB中证明外部公钥的所有权。   OrbitDB公钥可以通过以下方式检索: 【IPFS相关】OrbitDB:无服务器、分布式、对等的数据库   如果希望让其他对等方访问数据库,则需要以十六进制获取它们的公钥,并在创建数据库时将其添加到访问控制器。如果你想让别人给你写的权限,你需要给他们你的公钥(orbitdb.identity.publicKey的输出)。有关更多信息,请参考:访问控制。   访问控制 您可以指定对数据库具有写访问权的对等点。您可以定义一组对等点,这些对等点可以写入数据库,也可以允许任何人写入数据库。默认情况下,如果没有另外指定,则只有数据库的创建者才具有写访问权限。   注意!OrbitDB目前只支持动态添加写访问。也就是说,一旦添加,写访问就不能被撤销。在未来,OrbitDB将支持访问撤销和读取访问控制。目前,如果需要删除访问权限,数据库的地址将会更改。   访问权限是通过传递一个accessController对象来设置的,该对象指定创建时数据库的访问控制器类型和访问权限。OrbitDB目前支持写访问。访问权限指定为可以写入数据库的对等点的公钥数组。可以从标识检索给定访问权的公钥。每个对等点的公钥属性。 【IPFS相关】OrbitDB:无服务器、分布式、对等的数据库 要向另一个对等点提供写访问权,您需要通过一些方法获得它们的公钥。他们需要给你他们的OrbitDB实例的key的输出:OrbitDB .identity. publickey。   密钥如下: 042c07044e7ea51a489c02854db5e09f0191690dc59db0afd95328c9db614a2976e088cab7c86d7e48183191258fc59dc699653508ce25bf0369d67f33d5d77839   让另一个对等点写入数据库: 【IPFS相关】OrbitDB:无服务器、分布式、对等的数据库 公共数据库 访问控制机制还支持任何人都可以写入的“公共”数据库。 这可以通过在写访问数组中添加一个*来实现: 【IPFS相关】OrbitDB:无服务器、分布式、对等的数据库 注意,与前面的示例相比,访问控制器散列有何不同!   在数据库创建之后授予访问权 要在创建数据库之后对另一个对等点进行访问,必须将访问控制器类型设置为支持动态添加写访问的访问控制器(如OrbitDBAccessController)。 【IPFS相关】OrbitDB:无服务器、分布式、对等的数据库   自定义访问控制器 您可以通过实现AccessController接口并在将其传递给OrbitDB之前将其添加到AccessControllers对象来创建自定义访问控制器。 【IPFS相关】OrbitDB:无服务器、分布式、对等的数据库   添加一个条目 要向数据库添加条目,只需调用db。put(关键字,值)。 【IPFS相关】OrbitDB:无服务器、分布式、对等的数据库 若要向其他数据库添加条目,请参阅:
  • log.add()

  • feed.add()

  • docs.put()

  • counter.inc()

     

并行性 我们目前不支持并行更新。对数据库的更新需要按顺序执行。写吞吐量是每秒数百或数千次(取决于您的平台和硬件,YMMV),所以这不应该使您的应用程序速度降低太多。 一个接一个的更新数据库: 【IPFS相关】OrbitDB:无服务器、分布式、对等的数据库 NOT: 【IPFS相关】OrbitDB:无服务器、分布式、对等的数据库   得到一个条目 要从数据库中获取值或条目,我们调用适当的查询函数,该函数根据数据库类型的不同而不同。   键值: 【IPFS相关】OrbitDB:无服务器、分布式、对等的数据库 其他数据库,请参见:
  • log.iterator()

  • feed.iterator()

  • docs.get()

  • docs.query()

  • counter.value

持久性 OrbitDB将数据库的状态自动保存在磁盘上。这意味着,在打开数据库之后,开发人员可以选择在使用数据库之前本地加载持久化数据。强烈建议在使用数据库之前先在本地加载它! 【IPFS相关】OrbitDB:无服务器、分布式、对等的数据库 如果开发人员不调用load(),数据库将是可操作的,但不会立即提供持久数据。相反,OrbitDB将在来自同行的新更新到来时在后台加载数据。   复制数据库 为了得到相同的数据,即。查询对于所有的对等点返回相同的结果,必须在对等点之间复制一个OrbitDB数据库。这在OrbitDB中是自动发生的,在这种情况下,用户只需要从一个地址打开一个OrbitDB,它就会开始复制数据库。   要知道数据库何时更新,我们可以侦听数据库的复制事件:db2.events。on(‘ duplicate ‘,() =>…)当触发复制事件时,这意味着我们从对等点接收到数据库的更新。这是查询数据库以获得新结果的好时机。   在两个节点之间复制数据库: 【IPFS相关】OrbitDB:无服务器、分布式、对等的数据库   自定义商店 使用自定义存储实现默认OrbitDB数据库存储不支持的特定于用例的功能。然后,你可以很容易地添加和使用你的自定义商店与OrbitDB: 【IPFS相关】OrbitDB:无服务器、分布式、对等的数据库
【IPFS相关】OrbitDB:无服务器、分布式、对等的数据库

IPFS原力区

Slogan:让存储更安全、更高效、更开放、更经济 价值观:价值 共建 共享 荣耀

总部位于上海,聚集基于分布式网络&存储的众多技术大咖和爱好者,深耕基于 IPFS 的商业生态建设和社区发展。

每周二举办“分布式存储网络”主题沙龙,聚集了众多技术大咖和 IPFS 爱好者,通过持续输出全面、精细、优质的 IPFS 咨询和技术支持,将生态中的爱好者转化为 IPFS支持者和参与者,共建 IPFS 生态的健康发展。

【IPFS相关】OrbitDB:无服务器、分布式、对等的数据库

原创文章,作者:IPFSforce,如若转载,请注明出处:http://ipfser.org/2019/06/06/%e3%80%90ipfs%e7%9b%b8%e5%85%b3%e3%80%91orbitdb%ef%bc%9a%e6%97%a0%e6%9c%8d%e5%8a%a1%e5%99%a8%e3%80%81%e5%88%86%e5%b8%83%e5%bc%8f%e3%80%81%e5%af%b9%e7%ad%89%e7%9a%84%e6%95%b0%e6%8d%ae%e5%ba%93/

发表评论

登录后才能评论

联系我们

在线咨询:点击这里给我发消息

邮件:ipfsforce@qq.com

工作时间:周一至周五,9:30-18:30,节假日休息

QR code