Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/343.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java nodejs mongodb和android studio获取速度慢_Java_Android_Node.js_Mongodb - Fatal编程技术网

Java nodejs mongodb和android studio获取速度慢

Java nodejs mongodb和android studio获取速度慢,java,android,node.js,mongodb,Java,Android,Node.js,Mongodb,我有一个系统,从我的服务器中提取数据,并通过android studio将其存储到移动SQL数据库中。它能起作用,但速度慢得像30分钟。我的数据库中有大约86000条记录,希望将它们全部从服务器中取出。最好的方法是什么 目前,我从服务器获取计数,然后查询服务器数据库,直到找到每个ID,然后将结果发送回我的移动应用程序 app.post(“/get_data”),函数(req,res) { var Id\u request=req.body.Id\u request;//请求的Id var que

我有一个系统,从我的服务器中提取数据,并通过android studio将其存储到移动SQL数据库中。它能起作用,但速度慢得像30分钟。我的数据库中有大约86000条记录,希望将它们全部从服务器中取出。最好的方法是什么

目前,我从服务器获取计数,然后查询服务器数据库,直到找到每个ID,然后将结果发送回我的移动应用程序

app.post(“/get_data”),函数(req,res)
{
var Id\u request=req.body.Id\u request;//请求的Id
var query={Val\u String:Id\u request};//查询值
//console.log(查询);
//find({},函数(err,result){//查找所有数据
findOne(查询,函数(err,result){//查找所有数据
如果(错误){
//资源状态(400)。发送(错误);
console.log(“发送错误”);
res.status(200.send();
}否则{
返回res.json(结果);
}
});
});
我在每个ID的pull请求中使用recersive函数

private void call_method()
    {
        HashMap<String, String> map = new HashMap<>();
        map.put("Id_request", Integer.toString(data_pointer));//The ID value
        Call<Fetch_result> call = retrofitInterface.executeGet_data(map);//Run the post
        call.enqueue(new Callback<Fetch_result>() {
            //call.enqueue(new Callback<Fetch_result>() {
            @Override
            public void onResponse(Call<Fetch_result> call, Response<Fetch_result> response) {
                if (response.code() == 200)//Successful login
                {
                    D1= response.body().getT1_String();
                    D2= response.body().getT2_String();
                  
                    data_pointer = data_pointer + 1;
                    boolean result = BLE_DB.addData_Downloaded(D1,D2);//Add data
    
                    if(data_pointer<= Total_entries) {//Call method again
                        call_method();//Recursive here
                    }else if (data_pointer > Total_entries){
                        Utils.toast(getApplicationContext(),"All data received");
                    }

                } else if (response.code() == 404) {
                    Utils.toast(getApplicationContext(), "Get data fail");
                }
            }

            @Override
            public void onFailure(Call<Fetch_result> call, Throwable t) {
                Utils.toast(getApplicationContext(), "Get data error");
            }
        });
    }
private void call_method()
{
HashMap=newHashMap();
map.put(“Id_请求”,Integer.toString(data_指针));//Id值
Call Call=interface.executeGet_data(map);//运行post
call.enqueue(新回调(){
//call.enqueue(新回调(){
@凌驾
公共void onResponse(调用、响应){
if(response.code()==200)//成功登录
{
D1=response.body().getT1_String();
D2=response.body().getT2_String();
数据指针=数据指针+1;
布尔结果=BLE_DB.addData_下载(D1,D2);//添加数据
if(数据指针总数项目){
toast(getApplicationContext(),“接收的所有数据”);
}
}else if(response.code()==404){
toast(getApplicationContext(),“获取数据失败”);
}
}
@凌驾
失败时公共无效(调用调用,可丢弃的t){
toast(getApplicationContext(),“获取数据错误”);
}
});
}
我如何加快速度或以不同方式加快速度?

  • 尝试一次获取尽可能多的数据(限制查询的数量)。很难告诉您如何获取数据,因为我不知道您的monogDB集合
  • 尽量减少请求。如果您可以一次返回所有提取的数据,这将为您节省一些时间
  • JSON在86000个文档上运行时可能非常慢
  • 考虑为将来的用户缓存数据
  • 现在,我怀疑限制您的是您正在对db执行86000次查询……如果您可以获得整个mongoDB集合,那么可能会快一点(查看注释)

    注:
    (省略查询参数将导致获取整个集合)

    您必须获取所有数据吗?没有办法按需获取数据吗?是的,很遗憾,我想获取该批数据。因为这是数据日志的必要部分。因此,有一个包含更多结果的查询,一次发送更多结果。从而限制查询调用?也有可能在集合中发送X个数量的文档吗?如果您do db.collection.find()如果没有任何查询,那么您将获得集合中的所有文档。那么是否可以在集合中发回X个文档?->我不明白您的意思如果我不添加查询,您是正确的,我将获得所有条目。但是我不知道如何一次接收所有条目。因此我想知道我是否可以像5号那样发送en 5因此X