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


我刚刚发现了gunDB,这个概念看起来非常有趣,我想在开始进一步评估它之前找到更多关于它的信息。

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

5607
2018-06-16 15:16


起源

这一次有很多问题,最好将其分解为较小的问题。 - nawfal


答案:


  1. 聊天室。 所以以同样的方式 聊天教程 加载聊天“表”,你可以只有一个“房间”表。然后你只能抓住你想要的房间。因为枪使用 谐音 为了快速,它只会最终加载您订阅的数据。是的,客户端只能存储整个数据的子集 - 但这当然可能会影响您的复制/持久性级别。如果你担心这一点,那么运行一个“强大的”对等体(如服务器)是一个简单而完美的解决方案,因为它会备份所有内容。 (不幸的是,因为WebRTC对它有问题,所以无论如何你都必须运行中继服务器对等。所以也可以将它用于存储)。

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

  3. 安全/授权 是一个非常敏感的主题,所以这很大程度上取决于你想要如何构建你的应用程序。如果您想要真正的P2P /分散式设计,那么您需要端到端的公钥/私钥 密码学和签名。这样其他用户即使可能正在帮助备份数据,也无法真正读取数据。但是,如果您希望保持简单并像构建大多数应用程序一样构建您的应用程序...作为集中服务,那么您将代理写入服务器。这与大多数人在构建应用程序时使用的技术相同,而GUN可以做同样的事情。

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

  5. 时间数据/限制数据传输。首先看我的上述响应,可行,但依赖于外部API。但是在限制查询方面,是的。答:我们很快就会引入“词汇游标”,允许客户限制响应,但是我们可能会逐步推出每个约束功能(因为它不是社区的重中之重,但是你的参与将升级它!),首先使用精确的属性匹配(想象一下SQL select语句 - 事实上,它是我们将用来为枪创建SQL查询扩展名!),然后是第二个词法范围(选择属性开始)使用'a'到'c')可以使用时间戳范围来完成,然后是第三个字节约束(类似于一次最多发回200字节)。 然而,你可以手动做一个显而易见的事情(不是你想要的),你可以只有一个房间表,然后房间是一个块表,而块是一个消息表。潜在的房间也有“最后”块,然后您可以轻松访问您的聊天应用程序 gun.get('rooms').path('mychatroom').path('last').map().val(function(message){ console.log(message); }); 或类似的东西。这将允许您精确控制您想要的条件,但也意味着您必须做更多的工作。

  6. 循环参考。已经为你完成了,你可以拥有尽可能多的循环引用 - 这是因为它的图形结构(圆形引用,表格,文档,键/值,等等)而优于枪支的地方。

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

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

* WebRTC要求STUN / ICE /信令服务器引导WebRTC连接。哪个超级烦人。这意味着即使WebRTC是P2P,为了连接,你必须通过一些服务器,这必须为每个页面加载感到高兴。正因为如此,我们默认捆绑枪与websockets / JSONP,它必须连接到枪中继服务器同行(也有这样的社区枪接力同行,人们可以用于个人实验,但它很容易运行自己的在Point4)。因此,我们尚未发布WebRTC适配器,尽管WebRTC +枪非常适合 - 愚蠢的STUN / ICE /信令服务器。


10
2018-06-17 20:31



谢谢马克!一旦我有机会再尝试这个工具,我会跟进 - Eric
@marknadal Point 8 /有关枪支服务器的链接很好但是 指向一个没有示例的资源!它仍然是 奇异的 如何为其他人设置一个自己的对等体加入{peers}选项参数...一个真实的例子完整设置(枪式服务器)会很好 - 1111161171159459134
@ 1111161171159459134好点。我自己并没有真正维护枪支服务器项目,但是你提出了一个很好的观点。你会在这个回购中提出这个问题吗? - marknadal