用于大型集中存储数据的枪数据库存储模型,微型协作客户端

时间:2017-04-23 13:28:51

标签: gun

使用案例

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

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

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

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

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

问题:

由于每个客户端都无法存储所有文档,因此需要一种方法从客户端删除“旧”文档的副本,而不是从中央存储中删除文档,理想情况是基于最近的自动文档 - 用过的方法。怎么用枪来处理?

在枪支中,如何从中央商店删除文档,以便有效地永久删除所有客户端,并且不再可以访问所有客户端?

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

1 个答案:

答案 0 :(得分:1)

很棒的问题,@ user2672083。这是目前的布局:

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

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

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

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

  5. 永久删除数据并回收空间。虽然这应该很容易进行集中设置,因为默认情况下枪是P2P,它使用称为tombstoning to delete数据的技术。鉴于LRU / TTL / GC /删除的许多请求(如你的),将来会有更好的支持。目前,您必须在S3上混合使用rm data.jsonlocalStorage.clear()和30天生命周期才能实现此功能。这将在未来更加集成/更容易。

  6. 现在问你一个问题:你在做什么,我该如何帮助?你问过的许多事情现在都有可能(有一些工作),但预计会成为下一版枪支的焦点 - 我很乐意在你建立这个版本时得到你的反馈。

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

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