通过ColdFusion(Lucee)使用大型JSON数据集填充SELECT非常慢

如果我提供的信息超出了此问题的要求,请原谅我。 :d

我正在构建一个从远程计算机中提取大型JSON数据集的应用程序。 但是,我在一个安全的环境中工作,将应用程序服务器与防火墙等分开。因此,我不得不做一些捏造(使用SSH)来获取我需要的数据。 我已经请求打开其他端口,因此我可以绕过SSH但被拒绝。

以下是通过SSH获取数据的物理路径: 我的应用服务器 – > 带curl的安全服务器 – > 带有JSON数据的多个唯一应用服务器

遵守安全规则; 我在我的应用服务器上编写了下面的CFML代码。 (服务器运行Linux,Lucee 4.5,MySQL和Apache)

      #cfcatch.message#
#cfcatch.detail#

上面的代码只是通过SSH连接到安全服务器并运行一个名为server_list.sh的脚本。 脚本的重要部分如下:

 curl -s -k -b cookie.jar -c cookie.jar https://unique_application_server/Path/To/Server/list -H "Accept:application/json" 

该curl脚本返回一个JSON字符串,该字符串与此类似(但具有更多数据):

 { "os" : "Linux ", "fqdn" : "server1.my.example.com", "disk_status" : "OK", "system_model" : "HP", "type" : "Server" }, { "os" : "Linux ", "fqdn" : "server2.my.example.com", "disk_status" : "OK", "system_model" : "Dell", "type" : "Server" }, 

此时发送的JSON数据量约为3MB。 但是,随着时间的推移,这些数据将呈指数级增长。

一旦我将JSON返回到我的应用程序服务器; 我使用CF的deserializeJSON函数然后抓住我需要的字段。 在这种情况下,它是FQDN字段。 由于来自JSON的数据是一个完整的域,我需要只选择主机名。 “new_label”代码负责这一点。 可能有一个比我正在使用的更好的REGEX或更好的方法,但这是有效的。

       #new_label#   

上面的代码使用JSON中的服务器主机名填充该字段。 OPTION字段看起来像这样:

 server1 

可能(或可能不)帮助的一些注意事项。 我正在使用jQuery和multi-select.js将SELECT转换为并排字段。 多选是来自这里: http : //loudev.com/

其次,路径中的所有服务器都相当强大,并且都通过10GB连接。 所以除了之间的防火墙之外,不应该有任何瓶颈。

无论我使用哪种浏览器,上面的代码都可以工作,但填充主机名字段时速度相当慢。 因为JSON数据我每分钟都会提取更新,所以我无法将其长期存储在应用服务器上的数据库中。

知道了这一切,我的问题是:如何加快表单字段,以便用户不必等待页面加载2500+服务器名称?

我可以利用jQuery或MySQL数据库来加快速度而不会遇到过时的数据吗? 它可能只是我从FQDN获取主机名的方法吗? 我应该废弃这种方法并尝试别的吗? 我是否在Stack上忽略了一些有我答案的东西? (我花了很多时间在这里搜索Q / A,但一无所获。也许我看起来不够努力。)

你们好朋友需要的其他信息吗? 谢谢! :d

更新 –

@Alex。 我现在非常考验。 代码如下。 不错的建议!

     Page(#testTime#ms) 

至于缓存数据,这是我的问题的一部分。 如何缓存? 使用什么方法? 如何在不显示陈旧数据的情况下缓存JSON? 这是一个AJAX有用的实例吗?

更新2 –

我可以用错误的方式解决这个问题吗? 我知道有时您需要向用户显示大量数据。 只需添加一个BlockUI和一个进度条,请等待成为一个好的解决方案? 我更愿意诚实地找出更好的解决方案,但我肯定会接受建议! 思考?