gun db 存储模型,用于大型集中存储数据、小型协作客户端

gun db storage model for large centrally stored data, tiny collaborative clients

用例:

假设我想创建一个实时协作文档编辑系统。

在此场景中,许多用户可以创建和协作处理许多文档。

由于客户端设备的限制,任何客户端都不可能保留所有文档的副本,只能保留少数文档。

需要有一个中央存储服务器,所有的文档都在,并且这个服务器总是备份。

每个客户端可以'subscribe'任何文档,所有订阅的客户端都可以看到所有其他客户端subscribed/editing同一个文档的实时变化。

问题:

由于每个客户端无法存储所有文档,因此需要有一种方法可以从客户端删除 'old' 文档的副本,而无需从中央存储中删除文档,理想情况下基于自动最近最少使用的方法。这在枪支中是如何处理的?

在 gun 中,如何从中央存储中删除文档,然后有效地从所有客户端中永久删除,并且不再可供所有客户端访问?

当文档从中央存储中删除时,物理存储 space 如何实际回收供以后使用?

很好的问题,@user2672083。这是当前布局:

  1. 可以使用 gun 进行协作实时文档编辑。这是我很久以前记录的quick prototype,但是还没有完整的预建examples/implementations。

  2. 默认情况下,并非所有数据都存储在每个客户端上。浏览器只保留它 requests/gets/subscribes 到的数据。

  3. 默认服务器已经作为备份。我建议使用 S3 存储适配器,因为这样你就不必担心 运行 磁盘不足 space。

  4. 正在删除旧副本。目前,如果我希望服务器充当中央 "master",我只需在浏览器代码的顶部放置一个 localStorage.clear()。这将强制浏览器必须始终从服务器加载最新的。但这并不理想,根据 roadmap.

  5. ,LRU 特定功能即将推出
  6. 永久删除数据并回收 space。虽然这对于中央设置来说应该很容易,因为默认情况下 gun 是 P2P,它使用一种称为 tombstoning to delete 数据的技术。鉴于 LRU/TTL/GC/deleting 的大量请求(如您的请求),将来会对此提供更好的支持。目前,您必须在 S3 上混合使用 rm data.jsonlocalStorage.clear() 和 30 天生命周期才能使其正常工作。这个以后会更integrated/easier

现在问你一个问题:你在做什么,我能提供什么帮助?您询问的许多事情现在都可以(通过一些工作)实现,但将成为下一版 gun 的焦点 - 我很乐意在我们构建它时得到您的反馈。


所有对等点都回复数据请求 (#2),这意味着 localStorage 和服务器都会回复。因为 localStorage 在物理上离用户更近,所以它会回复 first/fastest 然后来自服务器的回复将被合并。 GUN 不会尝试每个节点 "in sequence" 进行 try/catch 级联,GUN 会并行回复所有节点。

GUN 具有可交换的存储和传输接口,所以是的,很容易在上面或里面构建其他层。