有关gunDB 作为 Cordova 项目的独立数据库的具体问题

2024-05-04

我刚刚发现了gunDB,这个概念似乎非常有趣,我想在开始进一步评估它之前了解更多信息。

  • 如果我想构建一个像教程一样的聊天应用程序但实现聊天rooms。有没有一种方法可以让客户端只“订阅”某些聊天室,而避免传输其他所有聊天室的内容?如果不是所有数据都同步到所有客户端,这会如何影响持久性?我们是否需要运行一个特殊的客户端(即服务器?)来确保所有数据始终保持活动状态?
  • 对于同一个聊天室教程,如果我想订阅多个聊天室,是否需要实例化多个 Gun 实例,每个实例都使用“对等”存储?
  • 在gunDB中应该如何处理用户管理/密码/等? 向每个客户端发送用户数据库的副本很有趣 复制的角度来看,但从安全角度来看,这似乎是相反的 直觉的。
  • 有没有办法要求枪仅在某些情况下同步,例如当 WiFi 连接可用时(想想 Cordova)?
  • 那么时态数据呢?有没有办法在聊天应用程序中, 告诉gunDB我只对未来的消息感兴趣的实例 并忽略在某个特定时间之前创建的任何内容 状态/时间戳(再次避免在 昂贵的数据计划)?
  • 如何将gunDB中的数据持久保存到磁盘(可能是循环的) 如果需要的话将数据加载回数据库?
  • 你能要求gun同时监控两个按键吗?例如,如果客户端需要显示聊天数据和待办事项列表(教程中的两个“键”),假设两者都是“对等”。
  • 有关于如何使用自己的服务器进行存储的教程吗?

  1. 聊天室。所以以同样的方式聊天教程 http://gun.js.org/converse.html加载聊天“表”后,您就可以有一个“房间”表。然后你就可以只抢你想要的房间了。因为枪使用partials https://github.com/amark/gun/wiki/Partials-and-Circular-References-%28v0.2.x%29为了快速起见,它最终只会加载您订阅的数据。是的,客户端只能存储整个数据的子集 - 但这当然可能会影响您的复制/持久性级别。如果您担心这一点,那么运行一个“强大”的对等点(如服务器)是一个简单而完美的解决方案,因为它将备份所有内容。 (不幸的是,因为 WebRTC 有问题*,无论如何你都必须运行一个中继服务器对等点。所以不妨也将它用于存储)。

  2. 多个实例。您不需要为每个键实例化多个枪实例。事实上,这很糟糕。如果你不这样做更好。这是可能的,但是我们还没有对此进行尽可能多的测试,因为它并不理想。

  3. 安全/授权这是一个非常非常敏感的主题,所以这很大程度上取决于您想要如何构建应用程序。如果您想要真正的 P2P/去中心化设计,那么您需要进行端到端公钥/私钥密码学和签名 https://github.com/amark/gun/wiki/Security%2C-Authentication%2C-Authorization。这样其他用户实际上无法读取数据,即使他们可能正在帮助备份数据。但是,如果您想让事情变得简单并像大多数应用程序一样构建您的应用程序......作为集中式服务,那么您可以将写入代理到您的服务器。这与大多数人当前在构建应用程序时使用的技术相同,GUN 可以做同样的事情。

  4. WiFi/限速数据。不幸的是,这不能直接在 JavaScript 中使用,但是听起来像您在 PhoneGap 中提到的混合应用程序可以访问该信息。 GUN 被设计为在这样的场景中工作,因为它是离线优先的。但是如何与为您提供这些条件的外部 API 进行交互……超出了我的经验,但也是可行的。

  5. 时态数据/限制数据传输。首先参见我上面的回复,可行但依赖于外部 API。不过,就限制查询而言,是的。答:我们很快就会推出“词汇游标”,这将允许客户限制响应,但是我们可能会逐步推出其每个限制功能(因为它并不是社区的首要任务,但您的参与将会升级它!),首先是精确的属性匹配(像 SQL select 语句一样思考 - 事实上,这就是我们将用来为 Gun 创建 SQL 查询扩展的内容!),然后是词法范围(选择从'a' 到 'c'),这可以通过时间戳范围来完成,然后是第三个字节约束(例如一次最多发回 200 个字节)。 然而,很明显,您可以自己手动完成(不是您想要的),您可以只拥有一个房间表,然后房间是一个块表,而块是一个消息表。房间可能还有一个“最后”块,那么您可以通过执行以下操作轻松访问您的聊天应用程序gun.get('rooms').path('mychatroom').path('last').map().val(function(message){ console.log(message); });或类似的东西。这将使您能够准确控制您想要的条件,但也意味着您必须做更多的工作。

  6. 循环引用。已经为您完成了,拥有任意数量的循环引用 - 这是 Gun 的优势所在,因为它的图形结构(循环引用、表格、文档、键/值等)。

  7. 是的,枪可以同时监控多个按键。

  8. 使用您自己的服务器进行存储......这可能意味着一些不同的事情。 如何运行自己的枪支服务器?有一个简单的包装器:https://www.npmjs.com/package/gun-server https://www.npmjs.com/package/gun-server。如果您想要 Express 之类的示例,这些也很简单。 由于不想使用 S3,如何使用当前部署的服务器的文件系统作为存储?您可以使用电平驱动程序https://github.com/PsychoLlama/gun-level https://github.com/PsychoLlama/gun-level。 这回答了吗?

*WebRTC 需要 STUN/ICE/信令服务器来引导 WebRTC 连接。这太烦人了。这意味着即使 WebRTC 是 P2P,为了获得连接,您必须通过某个服务器,并且该服务器必须满足每个页面加载的需要。因此,我们默认将枪与 websockets/JSONP 捆绑在一起,它必须连接到枪支中继服务器对等点(也有社区枪支中继对等点,人们可以使用它们进行个人实验,但很容易运行您自己的服务器)在第 4 点)。因此,我们还没有发布 WebRTC 适配器,尽管事实上 WebRTC + 枪是一个完美的组合 - 愚蠢的 STUN/ICE/信令服务器。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

有关gunDB 作为 Cordova 项目的独立数据库的具体问题 的相关文章

随机推荐