1

用例:

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

在这种情况下,许多用户可以创建和协作处理许多文档。

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

需要有一个中央存储服务器,所有文档始终存在,并且该服务器始终备份。

每个客户端都可以“订阅”任何文档,并且所有订阅的客户端都可以看到所有其他订阅/编辑同一文档的客户端的实时更改。

问题:

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

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

当一个文档从中央存储中删除时,物理存储空间是如何实际回收以供以后使用的?

4

1 回答 1

1

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

  1. 使用枪可以进行协作实时文档编辑。这是我很久以前记录的一个快速原型,但是还没有完整的预构建示例/实现。

  2. 默认情况下,并非所有数据都存储在每个客户端上。浏览器只保留它请求/获取/订阅的数据。

  3. 默认服务器已充当备份。我建议使用 S3 存储适配器,因为这样您就不必担心磁盘空间不足。

  4. 删除旧副本。目前,如果我希望服务器充当中央“主”,我只需localStorage.clear()在浏览器代码的顶部放置一个。这将迫使浏览器必须始终从服务器加载最新的。但这并不理想,根据路线图,LRU 特定功能即将推出。

  5. 永久删除数据并回收空间。虽然这对于中央设置来说应该很容易,因为 gun 默认是 P2P,它使用一种称为tombstoning 的技术来删除数据。鉴于有很多 LRU/TTL/GC/删除请求(如您的请求),将来会有更好的支持。目前,您必须在 S3 上混合使用rm data.json,localStorage.clear()和 30 天的生命周期才能使其正常工作。这将在未来更加集成/更容易。

现在问你一个问题:你在做什么,我能提供什么帮助?你问的很多事情现在都是可能的(有一些工作),但将成为下一个版本的枪的重点——我很想在我们建立这个的过程中得到你的反馈。


所有对等点都回复数据请求(#2),这意味着 localStorage 和服务器都会回复。因为 localStorage 在物理上更接近用户,所以它将首先/最快地回复,然后来自服务器的回复将被合并。GUN 不会“按顺序”尝试每个对等点进行 try/catch 级联,GUN 会并行地从所有对等点回复。

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

于 2017-04-24T19:35:29.003 回答