1. IPFS原力区首页
  2. IPFS

【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指定了正在使用的协议。

第二部分是IPFSmultihashQmd8TmZrWASypEp4Er9tgWP4kCNQnW4ncSnvjvyHQ3EVSU,它是一个数据库清单,其中包含数据库的名称和类型等信息,以及一个指向访问控制器的指针。最后一部分,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:无服务器、分布式、对等的数据库

原创文章,作者:IPFS原力区,如若转载,请注明出处:https://ipfser.org/2019/06/06/no-server-distributed-peer-to-peer-database/

提示:投资有风险,入市须谨慎。本资讯不作为投资理财建议。

发表评论

登录后才能评论

联系我们

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

邮件:ipfsforce@qq.com

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

QR code