2017-04-23 164 views
1

使用案例:枪数据库存储模型的大型集中存储数据,微小的协作客户

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

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

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

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

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

问题:

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

在枪中,如何从中央存储中删除文档,以便将其从所有客户端有效地永久移除并且无法访问?

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

回答

0

伟大的问题,@ user2672083。这里是目前的布局:

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

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

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

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

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

现在有一个问题给你:你在做什么,我该怎么帮忙?你询问的许多事情现在都可能(有些工作),但是被定为下一个版本的关注焦点 - 我很乐意在建立这个过程中得到你的反馈。


所有的同伴回复数据请求(#2),这意味着localStorage和服务器都会回复。由于localStorage距离用户较近,因此它会首先回复/最快,然后合并服务器的回复。 GUN不会尝试每个对方“按顺序”进行try/catch级联,并行地从所有同级进行GUN回复。

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

+0

谢谢你的回复。 Re#2&#4,当浏览器重新打开时,不会总是最终联系活跃对等方?如果是这样,'localStorage.clear()'不会受到伤害,但如果不能连接到'主'节点,就不应该调用? Re#3,如果所有的客户都离开了,那么服务器将是单个副本,这不是备份;理想情况下,真正的备份只不过是另一个服务器枪,但实际上会收到主人发生的所有变化?此外,或用例需要支持Azure,Google,其他云提供商和内部部署 – user2672083

+0

我们目前正在使用Firebase以及Druid和ElasticSearch。我们正在考虑取代Firebase。在对枪码进行更深入的研究之后,从概念上来看,“存储”接口枪似乎可以更好地定义和抽象。然后它可以与'客户端'或'服务器'实现对话,谁会处理事物的生命周期,他们自己使用相同的接口,然后坐在实际的存储提供者之上。这是重构我们可以协助并为枪支做贡献的东西吗? – user2672083

+0

@ user2672083通过编辑答案回复:)回复:现在你已经可以部署到他们的Azure/GCS,并且复制枪的S3适配器/驱动程序并将其替换为Azure/GCS Blob Store API - 或者我们可以构建它这为你轻松地(发送电子邮件到企业[AT] gunDB [DOT] io的定价)。与存储/抽象层相同,GUN具有简单的线规格,使我们可以为您构建新的/可交换的驱动程序/适配器变得很容易。让我知道! – marknadal