有效地将大约20kb的文本保存到mysql

有效地将大约20kb的文本保存到mysql

问题描述:

我有一个可以理解的div,用户可以输入大约20kb的文本。当他们打字时,我想保留自动保存该div到一个mysql表格,以便他们以后可以在他们的手机,平板电脑等设备上检索该文本。到目前为止,我只是通过整个文本块自动保存每20秒对我的表中包含该文本的行进行更新。有效地将大约20kb的文本保存到mysql

我意识到这种方法效率很低,一旦我的用户群增长就无法工作。有一个更好的方法吗?例如,以某种方式在原始文本和改变之间进行区分并仅保存该文本?使用node.js?如果你有一些想法,让我知道。谢谢。

并非所有的文本都是20kb,所以不需要是直接的问题。您也可以选择自动保存的频率较低,并且您也可以自动保存到一个会话中,并且只能较低频率地写入数据库。

您可以计算存储的版本(可以保存在会话中)和打印版本之间的差异。好处是您不必经常使用数据库,但处理将变得更加困难,因此Web服务器上的负载也会增加。

我也许会选择自动保存内存表(可以选择MySQL中的存储类型),然后编写一个单独的进程/定时任务,以定期更新物理表。

+0

性能方面,将会话中的文本存储在内存表中并仅更新实际表中的行之间有什么区别?会话内存表会占用较少的资源,还是仅仅是一个可以减轻主表流量的修复? – Lukasz

+0

不一定是会话表,也可以使用其他内存表。写入内存的速度更快。除此之外,如果您在会话中保留正在编辑的文本,则不必每次都从物理表中读取。如果在该表上有很多写入操作,读取MySQL的速度就会变得非常慢,所以尽量避免这种情况。如果你的网站变得非常大,你会发现MYSQL是不够的,但在那之前你可以稍微扩展一下。 ;) – GolezTrol

这让我想起谷歌文档,他们有一个相当不错的自动保存大型文本到数据库的系统。现在我不知道谷歌文档的内部组件,但这是你可能想要看的东西。

谷歌有更多的带宽,所以他们的方法可能不适合你,虽然他们似乎不断地将数据保存到他们的服务器。

你可以做的是使用JavaScript并在用户端保存数据,并且只在用户离开或点击“保存”时才将数据加载到数据库中。这样,当他们回到页面时,只要保存文件存在,他们就可以回到他们的文件。

方式一:

  1. 使用Ajax每x秒,甚至由x个字的倍数(每10个,20个,30个字符e.g等)的文本发送回服务器。

  2. 使用服务器端代码(例如php)从这个请求中完成大部分工作(因为它的速度和效率都很高),您可以在会话中保存文本。

  3. 在每个请求的服务器端代码可以从最后一个请求的会话文本比较,然后会给你做下面的一个可能性:

    a)如果新文本的开端是一样的旧的会话文本,然后只需用用再说CONCAT不同更新数据库中的字段:

    update table 
    set field=concat(field,'extra data...') 
    where id='xx' 
    

    ,然后设置会话文本到新的文本。 b)如果开始文本不同,那么你知道你需要做一个直接更新语句来将字段值更改为新文本。

另一种方式:

  1. 你只能做完全更新时,必要的,如果不只是一个CONCAT。
  2. 您可以在执行更新之前“保留”一定数量的请求,例如每5秒或字符运行一次ajax,但您的服务器端脚本仅在每次第5次调用或20个字符或添加时运行update语句20个字符,如果第一部分没有改变。