创建顺序文档编辑系统的最佳方法(一次只能有一个人编辑文档)

时间:2010-12-10 04:33:35

标签: php javascript mysql ajax

下面有很多话,抱歉 - 但我想很好地解释这种情况:

我正在创建一个允许任何登录用户编辑单个文档的系统,但我不希望多个用户同时编辑该文档。

(仅供参考,我计划在我的网站上有无限数量的这些文件,用户可以创建新文档。基本上,想象一下Google Docs,但只有一个用户能够一次编辑一个文档)

我目前有一个JavaScript / AJAX / PHP解决方案,每个文档都包含一个数据库存储变量,该变量包含当前正在编辑该文档的用户的用户ID。在该用户完成之前,没有其他用户可以编辑该文档,并且文档

当用户“完成”编辑时(这意味着他们要么关闭编辑窗口或保存他们的更改),该文档再次可供任何其他用户使用...或者至少应该在理论上。对于我正在开发的应用程序,重要的是文档尽快可用。如果编辑用户保存了他或她的更改,那不是问题,但如果用户关闭编辑窗口并且不保存任何更改,则会出现问题。

我目前的设置,考虑到非保存的情况,是定期进行AJAX调用,到一个基本上说“我还在编辑的php页面。给我两分钟的编辑时间。”因此,如果用户关闭页面,则文档将在两分钟内提供给所有人。这对于我需要的东西来说太长了。我真的希望尽可能接近实时(虽然10秒的延迟不会太糟糕)。

这些文件是公开可见的,其状态以列表形式显示。当用户加载“查看可用文档”页面时,我需要进行查询以检查应显示的所有最新文档的状态,使编辑时间过期的文档可用,并使用当前可用的文档显示它们。

为什么这种方法很糟糕:当大量用户同时使用这个Web应用程序时,它涉及太多的数据库查询,检查和AJAX更新。

有更好的方法吗? (我希望如此!)

其他信息: - 我尝试使用window.unload(将AJAX调用发送到“我已完成编辑”页面),但没有足够的时间执行ajax调用。 - 我不认为我的托管服务提供商会允许使用持久性PHP脚本(我也没有任何持久性PHP脚本的经验)。 - 即使我可以使用持久性PHP脚本,如果我不得不同时运行大量这些脚本,我会担心所涉及的处理。 (100?1000?更多?我不知道可以使用多少处理能力。) - 我无法运行cron工作。 - 如果我有我的编辑客户端“我还在编辑”AJAX脚本每10秒运行一次而不是每分钟左右,如果我有很多用户,这将是每秒很多AJAX调用,这将导致很多数据库访问,这不会很好。

我意识到我在这里提出的需求可能排除了许多其他好的潜在解决方案,但我很好奇是否有人能想到任何其他可行的方法。

谢谢!

编辑:(在评论中添加相关回复)

不幸的是,这些不是实际文件。它们是一些虚拟复合文件,由用户的个人贡献组成。想象一下,单个页面不是一组文本,而是一组连续提交的(从上到下)文本段,它们组合在一起构成完整的文档。每个用户提交的段都很短,并且单独存储在数据库中。 ---很奇怪,我知道,但对这个项目很有帮助和必要。

1 个答案:

答案 0 :(得分:0)

如果这些是实际文件,您可以使用this question中列出的技术。

然后继续做你正在做的事情,如果在2分钟内没有做出任何改变,或者你想要设置的任何时间,请关闭文件。

编辑:您是否可以将当前使用的文档存储在内存中并从那里访问它们?这将消除对大量数据库调用的需求,并且非常快。每30秒您可以查询该站点以重置文档计时器(在内存中)。有权访问该文件的下一个人可以检查该文档计时器,如果它是>你可以给他们访问的预定时间。

非常有趣的问题!