【问题标题】:How to store documents like google docs?如何存储像谷歌文档这样的文档?
【发布时间】:2014-07-16 02:05:01
【问题描述】:

我很感兴趣 google docs 如何在服务器端存储文档,因为我需要创建类似的应用程序。

它是使用纯 RTF/ODF 文件还是自己的数据库? 它们如何实现版本控制和撤消/重做功能?

如果有人知道这个问题,请与我分享。

【问题讨论】:

  • 我猜谷歌并没有公开这些信息,他们希望将他们的技术作为商业机密,以避免竞争对手实施同样的事情。
  • 好的。但是有没有类似的应用程序共享他们的方法?
  • 如果您的用户喜欢 Google 文档,服务器可以请求他们通过 Google 进行身份验证,以便代表他们创建文档。即使您不想这样做,浏览 google doc list API 文档也可能会有所启发:developers.google.com/google-apps/documents-list/?csw=1
  • 感谢您的回答,但我对自己的服务感兴趣
  • HTML 可能比 RTF/ODT 更适合版本控制。在网页上阅读和书写也更容易。

标签: javascript google-docs rtf odf


【解决方案1】:

专门回答您关于 Google 文档如何工作的问题。他们使用一种叫做

的技术

Operational Transformation

您可以使用以下所列的运营转换引擎之一:https://en.wikipedia.org/wiki/Operational_transform#OT_software

基本思想是每个操作都有一个上下文,例如“删除第五段中的第四个单词”或“在按钮后添加输入框”。客户端都通过服务器相互发送操作。客户端和服务器各自保留自己的文档版本,并在它们到来时应用操作。

当操作有重叠的上下文时,有一堆规则可以解决冲突。就像您无法修改已删除的内容一样,因此删除必须在该上下文的一系列并发操作中排在最后。

各种客户端和服务器可能会不同步,因此您需要辅助算法来保持一致性。一种方法是在检测到冲突时从服务器重新加载数据。

--这是我几年前问同样问题时从一位教授那里得到的答案。

【讨论】:

    【解决方案2】:

    您应该使用数据库。也许是一个存储每个文档修订的表格。首先,找到一种方法来确定更新是否重要。您可以在客户端存储微小的更改以进行重做/撤消,然后定期或根据某些条件(例如,用户点击保存),为每个修订创建一个数据库条目(您可以存储更改的字节数、添加的字节数、删除的字节数等内容,等等)。

    看看 MediaWiki,它是开源的,基本上可以满足您的要求(即,看看他们的表格和代码)。

    当用户请求导出文档时,通常会生成并提供 RTF/ODF。

    【讨论】:

    • 您确定我需要将每个文档修订存储在单独的表格中吗?也许有任何开源数据库允许制作类似 git 的功能?
    • 这不是很清楚(失眠:))对于每个文档,您可以存储一个修订表。或者您可以在一张表中执行此操作,等等。很多因素都会涉及到细节。
    • 我真的在寻找一种解决方案,如何使用撤消/重做和版本控制功能存储基于 JSON 的文档。
    • 我不明白您所说的基于 JSON 的文档是什么意思。您可以从 SQL 之类的东西生成 JSON,或将其静态存储在文件中。然后您可以按照stackoverflow.com/questions/3541383/undo-redo-implementation 的行存储修订
    • 我使用 MongoDB 作为数据存储,它对我来说很好用。现在我需要做撤销/重做和修订功能。如果我找到更好的解决方案,我可以放弃 MongoDB。
    【解决方案3】:

    您可能应该考虑使用 Google Drive 的公共 API。详情请见link

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2015-06-04
      • 2012-04-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-10-16
      • 1970-01-01
      相关资源
      最近更新 更多