我有一个Silverstripe网站,处理非常大的数据.我创建了一个返回非常大的转储的API,我通过ajax get在前端调用该API.
当ajax调用API时,返回数据需要10分钟(非常长的json数据和客户接受的数据).
当他们等待数据返回时,他们在另一个选项卡中打开相同的站点来执行其他操作,但在上一个ajax请求完成之前,该站点非常慢.
有什么办法可以避免在等待大json数据时一切都没有响应吗?
这是代码及其作用的解释:
我创建了一个名为geteverything驻留在Web服务器上的方法,如下所示,它访问另一个服务器(数据服务器)以通过流API(坐在数据服务器中)获取数据.有很多数据,数据服务器很慢; 我的顾客不介意这个请求需要很长时间,他们会想到其他一切都变得缓慢.会话用于确定请求的详细信息.
protected function geteverything($http, $id) {
if(($System = DataObject::get_by_id('ESM_System', $id))) {
if(isset($_GET['AAA']) && isset($_GET['BBB']) && isset($_GET['CCC']) && isset($_GET['DDD'])) {
/**
--some condition check and data format for AAA BBB CCC and DDD goes here
**/
$request = "http://dataserver/streaming?method=xxx";
set_time_limit(120);
$jsonstring = file_get_contents($request);
echo($jsonstring);
}
}
}
Run Code Online (Sandbox Code Playgroud)
我该如何解决这个问题,或者你还需要知道什么才能提供帮助?
我需要将数据类型从浮点数更改为当前获得10亿条记录的数据库的十进制数.有没有不可预见的问题?谢谢
我正在测试Cassandra作为时间序列数据库.
我创建数据模型如下:
CREATE KEYSPACE sm WITH replication = {
'class': 'SimpleStrategy',
'replication_factor': 1
};
USE sm;
CREATE TABLE newdata (timestamp timestamp,
deviceid int, tagid int,
decvalue decimal,
alphavalue text,
PRIMARY KEY (deviceid,tagid,timestamp));
Run Code Online (Sandbox Code Playgroud)
在主键中,我将deviceid设置为分区键,这意味着具有相同设备ID的所有数据将写入一个节点(它是指一个机器还是一个分区.每个分区最多可以有20亿行)如果我在其中查询数据同一个节点,检索速度很快,我是否正确?我是Cassandra的新手,对分区键和群集键有点困惑.
我的大部分查询如下:
我将有大约2000个deviceid,每个deviceid将有60个tagid/value对.我不确定它是否会是一行广泛的deviceid,timestamp,tagid/value,tagid/value ....