2017-01-16 3 views
-1

Я попытался получить список данных формы, хранящихся в базе данных в приложении для Android. Каждая строка базы данных содержит некоторую личную информацию человека в строчном формате, а также изображение этого человека. Я сохранил изображения в базе данных в формате MEDIUMBLOB.Извлечение данных из базы данных MySQL с использованием библиотеки Android Volley слишком медленно

Всякий раз, когда я пытаюсь получить данные с моего сервера с помощью JSONObjectrequest библиотеки Volley в приложении для Android, ответ обычно очень медленный. Иногда для просмотра всего 10-12 строк, полученных из базы данных, требуется более 1 минуты. Это мой LogCat:

D/Volley: [337] BasicNetwork.logSlowRequests: HTTP response for request=<[ ] http://helpclick.ahsanaasim.me/v1/tasksall/johny 0xa3e020c1 NORMAL 1> [lifetime=14740],

Я пытался найти идеальное решение, но я не мог найти что-нибудь удовлетворительное. Вот мой Java-код:

 mRequestStartTime = System.currentTimeMillis(); 
     JsonObjectRequest jsonObjectRequest = new JsonObjectRequest(Request.Method.GET, 
       showUrl2, new Response.Listener<JSONObject>() { 
      @Override 
      public void onResponse(JSONObject response) { 
       long totalRequestTime = System.currentTimeMillis() - mRequestStartTime; 
       System.out.println(totalRequestTime); 
       System.out.println(response.toString()); 
       try { c1++; 

        System.out.println(c1); 
        JSONArray incidents = response.getJSONArray("incidents"); 
        for (int i = 0; i < incidents.length(); i++) { 
         e=0; 
         JSONObject incident = incidents.getJSONObject(i); 
         c1++; 
         id= incident.getString("id"); 
         age = incident.getString("age"); 

         gender = incident.getString("gender"); 
         location = incident.getString("location"); 
         //det= incident.getString("det"); 

         String image=new String(); 
         image = incident.getString("bigimage"); 

         if(image.length()!=0) { 
          myBitmap = ConvertToImage(image); 
          Bitmap bitmap= Bitmap.createScaledBitmap(myBitmap,500,500,true); 

          imgs.add(bitmap); 
          ages.add(age); 
          genders.add(gender); 
          locations.add(location); 
          ids.add(id); 
         } 
        } 
        if(c1>0) { 
         System.out.println(ages.size()); 
         Intent intent1 = new Intent(search_buttons_page.this, All_Incidents.class); 
         startActivity(intent1); 
        } 
       } 
       catch (JSONException e) { 
        e.printStackTrace(); 
       } 
      } 
     }, new Response.ErrorListener() { 
      @Override 
      public void onErrorResponse(VolleyError error) { 
       System.out.append(error.getMessage()); 

      } 
     }); 
     jsonObjectRequest.setRetryPolicy(new DefaultRetryPolicy(
       20000, 
       DefaultRetryPolicy.DEFAULT_MAX_RETRIES, 
       DefaultRetryPolicy.DEFAULT_BACKOFF_MULT)); 

     requestQueue.add(jsonObjectRequest); 

Было бы очень полезно, если кто-то может сказать мне причину этого снижения производительности и как ее решить путем минимальных изменений в моем исходном коде.

+0

Каков диапазон и средний размер капли в вашей базе данных? Являются ли конечные точки выборки медленными, если вы извлекаете их из ноутбука/рабочего стола? – halfer

ответ

2

Не храните изображения в db. Храните их в файлах и сохраняйте URL-адрес файлов в db. Загрузите изображения по мере необходимости через URL. Тогда вы не будете убивать время доступа к базе данных с тем, что должно быть файлом ввода-вывода.

+0

Благодарим вас за предложение. Мне нужно несколько разъяснений. Большинство экспертов рекомендуют использовать файловую систему для хранения изображений в db. Однако, насколько я знаю, этот случай будет возникать, когда у вас есть тысячи строк в базе данных. Сейчас моя база данных содержит только 20-30 строк данных. Почему процесс замедляется настолько значительно даже при таком количестве данных для разбора? – lordsm068

+0

Даже 20-30 слишком много, особенно учитывая вашу реализацию Android. Вы сохраняете тогда 20-30 в памяти растровых изображений. Вы быстро пойдете OOM. На стороне сервера вы не разместили свой код сервера. Возможно, у вас есть другие проблемы. Но время, необходимое для отправки 20-30 изображений в два раза (от db до веб-сервиса, от веб-службы до клиента), может быть значительным. –