使用案例
说我想创建一个实时协作的文档编辑系统。
在这种情况下,许多用户可以在许多文档上创建和协作。
由于客户端设备的限制,任何客户端都无法保留所有文档的副本,只有少数几个。
需要中央存储服务器,所有文档始终存在,并且始终备份此服务器。
每个客户都可以“订阅”任何文档,订阅的所有客户都可以看到订阅/编辑同一文档的所有其他客户的实时更改。
问题:
由于每个客户端都无法存储所有文档,因此需要一种方法从客户端删除“旧”文档的副本,而不是从中央存储中删除文档,理想情况是基于最近的自动文档 - 用过的方法。怎么用枪来处理?
在枪支中,如何从中央商店删除文档,以便有效地永久删除所有客户端,并且不再可以访问所有客户端?
从中央存储中删除文档时,物理存储空间如何实际回收以供以后使用?
答案 0 :(得分:1)
很棒的问题,@ user2672083。这是目前的布局:
使用枪可以进行协作实时文档编辑。这是我很久以前录制的quick prototype,但是还没有完整的预构建示例/实现。
默认情况下,并非所有数据都存储在每个客户端上。浏览器仅保留其请求/获取/订阅的数据。
默认服务器已充当备份。我建议使用S3存储适配器,因为这样您就不必担心磁盘空间不足了。
删除旧副本。目前,如果我希望服务器充当中央“主”,我只需在浏览器代码的顶部放置一个localStorage.clear()
。这将强制浏览器必须始终从服务器加载最新的。但这并不理想,根据roadmap,即将推出LRU特定功能。
永久删除数据并回收空间。虽然这应该很容易进行集中设置,因为默认情况下枪是P2P,它使用称为tombstoning to delete数据的技术。鉴于LRU / TTL / GC /删除的许多请求(如你的),将来会有更好的支持。目前,您必须在S3上混合使用rm data.json
,localStorage.clear()
和30天生命周期才能实现此功能。这将在未来更加集成/更容易。
现在问你一个问题:你在做什么,我该如何帮助?你问过的许多事情现在都有可能(有一些工作),但预计会成为下一版枪支的焦点 - 我很乐意在你建立这个版本时得到你的反馈。
所有对等方都回复数据请求(#2),这意味着localStorage和服务器都会回复。因为localStorage在物理上更靠近用户,所以它将首先/最快地回复,然后将合并来自服务器的回复。 GUN没有尝试每个对等体“按顺序”做try / catch级联,GUN并行回复所有对等体。
GUN具有可交换的存储和传输接口,所以是的,很容易在顶部或其中构建其他层。