如何处理大型数据集以进行服务器端模拟-->客户端浏览器

5
抱歉标题有点混乱。我不确定该如何命名。我的情况是这样的:我有一个学术仿真工具,正在开发web前端。虽然基于C++的模拟器在小型系统中的计算效率非常高(几百分之一到十分之一秒),但它可以生成大量数据(约4-6MB),在Web应用程序中算是相当庞大。
目前的设置如下:
1. 用户访问index.html文件。页面左侧有一个交互式表单,用户可以输入模拟参数。右侧是他们创建的系统的表示形式,以及一些灰色选项卡,用于显示各种模拟数据。
2. 用户点击“运行模拟”。这将通过AJAX调用将请求的模拟参数提交到runSimulation.php文件。runSimulation.php根据提交的数据创建一个输入文件,然后使用此输入文件运行模拟器。模拟器会输出各种输出文件中的4-6MB数据。
3. 一旦模拟完成运行,浏览器的响应是另一个javascript函数,该函数调用returnData.php文件。这个php脚本将输出文件中的数据打包为JSON数据,将JSON数据返回给浏览器,然后删除数据文件。
4. 然后将此响应数据提供给浏览器的javascript中的一些绘图对象,并且选项卡变为活动状态。然后用户可以打开和交互绘制的数据。
这个设置还算可以,但我遇到了两个问题:
1. 返回的数据很慢-返回4-6MB的数据可能需要一段时间才能加载。(这些数据正在进行gzip压缩,这大大减少了其大小,但在较慢的连接上仍可能需要20多秒)
2. 下一个目标是允许用户绘制多个模拟运行结果以便比较结果。
我的想法是在用户会话处于活动状态时将数据文件保留在服务器上。这将使用户能够仅加载他们想要查看的图表的数据(并且在查看当前图表的结果时,也许可以在后台加载其他数据)。对于多次运行,我可以有多个数据集坐在服务器上,等待用户下载(如果/当需要)。
然而,我有一个很大的问题:如何识别(在php中)用户已经离开服务器,并删除数据?我不希望用户占据机器上的驱动器空间。对于这种Web应用程序的最佳实践有什么想法吗?
1个回答

1
对于问题#1,你没有太多选择。你已经使用了相对轻量级的JSON格式,并且正在使用Gzip压缩数据。4-6 MB的数据确实很多。顺便说一句,如果你认为PHP生成数据的时间太长,你可以使用C++程序生成数据并使用PHP提供服务。你可以使用exec()来完成这个任务。
然而,我不确定你的模拟是如何工作的,但Javascript是一个图灵完备的语言,因此你可能可以在客户端上生成部分/大部分/全部数据(无论哪种方式更合理)。在这种情况下,你将节省大量带宽并显著减少加载时间 - 但请注意JS可能会非常慢。
对于问题#2,如果你将数据留在服务器上,你需要跟踪活动会话(即用户最后一次与服务器交互的时间),并设置适合你的应用程序的超时时间。超时后,你可以删除数据。
为了跟踪交互,你可以使用JS检查用户是否处于活动状态(通过发送heartbeats或类似的内容)。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接