1. 程式人生 > >The efficiency of JSON data processing.

The efficiency of JSON data processing.

there’re about 680M map data in JSON I was proccessing (transforme JSON String to JSONArray then write in database).I ran the program in the afternoon , when I checked next morning,it still hadn’t finished!!I do the format transformed every 20M data,but seems like it’s not very effective…so let’s find out what is the best size limit when you try to proccess a huge JSON data.
Here’s Code I’m using ,proccess a 188MB JSON file.

/**
 * <B>方法名稱:</B>讀取地圖資料檔案<BR>
 * <B>概要說明:</B>資料檔案讀取成List<BR>
 * 
 * @return List<JSONArray> 地圖資料List
 * @throws IOException
 */
public List<JSONArray> readMapFile(MultipartFile multipartFile) throws IOException {
    List<JSONArray> mapFiles = new ArrayList<JSONArray>();
    JSONArray mapFile = new JSONArray();
    if (!multipartFile.isEmpty()) {
        StringBuffer sb = new StringBuffer();
        InputStreamReader reader = new InputStreamReader(multipartFile.getInputStream());
        BufferedReader bufferedReader = new BufferedReader(reader);
        String temp = "";
        int count = 0;
        boolean valid = false;
        while ((temp = bufferedReader.readLine()) != null) {
            sb.append(temp);
            if (!valid) {
                if (sb.indexOf("\"features\": [") == -1) {
                    continue;
                } else {
                    temp = sb.substring(sb.indexOf("\"features\": [") + 12);
                    sb.setLength(0);
                    sb.append(temp);
                    valid = true;
                }
            } else {
                if (sb.length() > 15 * 1024 * 1024) {
                    Calendar start = Calendar.getInstance();
                    temp = sb.substring(sb.lastIndexOf(",{ \"type\": \"Feature\", \"properties\":"));
                    mapFile = JSONArray.fromObject(
                            sb.substring(0, sb.lastIndexOf(",{ \"type\": \"Feature\", \"properties\":")) + "]");
                    mapFiles.add(mapFile);
                    Calendar end = Calendar.getInstance();
                    System.out.println("-------第" + (++count) + "個檔案讀取完畢,平均處理時間"
                            + (end.getTimeInMillis() - start.getTimeInMillis()) / 1000 + "---------------");
                    sb.setLength(0);
                    sb.append("[" + temp.substring(1));
                }
            }
        }
        bufferedReader.close();
        mapFile = JSONArray.fromObject(sb.substring(0, sb.lastIndexOf("}")));
        System.out.println("-------第" + (++count) + "個檔案讀取完畢,檔案處理完成---------------");
        mapFiles.add(mapFile);
    }
    return mapFiles;
}

Here’s result with different data size of each transformation…

10MB
-------第1個檔案讀取完畢,平均處理時間7---------------
-------第2個檔案讀取完畢,平均處理時間6---------------
-------第3個檔案讀取完畢,平均處理時間8---------------
-------第4個檔案讀取完畢,平均處理時間11---------------
-------第5個檔案讀取完畢,平均處理時間6---------------
-------第6個檔案讀取完畢,平均處理時間8---------------
-------第7個檔案讀取完畢,平均處理時間10---------------
-------第8個檔案讀取完畢,平均處理時間6---------------
-------第9個檔案讀取完畢,平均處理時間6---------------
-------第10個檔案讀取完畢,平均處理時間9---------------
-------第11個檔案讀取完畢,平均處理時間7---------------
-------第12個檔案讀取完畢,平均處理時間7---------------
-------第13個檔案讀取完畢,平均處理時間14---------------
-------第14個檔案讀取完畢,平均處理時間6---------------
-------第15個檔案讀取完畢,平均處理時間13---------------
-------第16個檔案讀取完畢,平均處理時間17---------------
-------第17個檔案讀取完畢,平均處理時間14---------------
-------第18個檔案讀取完畢,平均處理時間7---------------
-------第18個檔案讀取完畢,檔案處理完成---------------
-------共18個檔案讀取完畢,共177---------------
basically,the rate is about 1MB/s

5MB
-------第1個檔案讀取完畢,平均處理時間2---------------
-------第2個檔案讀取完畢,平均處理時間2---------------
-------第3個檔案讀取完畢,平均處理時間2---------------
-------第4個檔案讀取完畢,平均處理時間2---------------
-------第5個檔案讀取完畢,平均處理時間2---------------
-------第6個檔案讀取完畢,平均處理時間2---------------
-------第7個檔案讀取完畢,平均處理時間3---------------
-------第8個檔案讀取完畢,平均處理時間2---------------
-------第9個檔案讀取完畢,平均處理時間2---------------
-------第10個檔案讀取完畢,平均處理時間2---------------
-------第11個檔案讀取完畢,平均處理時間3---------------
-------第12個檔案讀取完畢,平均處理時間3---------------
-------第13個檔案讀取完畢,平均處理時間3---------------
-------第14個檔案讀取完畢,平均處理時間3---------------
-------第15個檔案讀取完畢,平均處理時間2---------------
-------第16個檔案讀取完畢,平均處理時間2---------------
-------第17個檔案讀取完畢,平均處理時間3---------------
-------第18個檔案讀取完畢,平均處理時間2---------------
-------第19個檔案讀取完畢,平均處理時間2---------------
-------第20個檔案讀取完畢,平均處理時間3---------------
-------第21個檔案讀取完畢,平均處理時間2---------------
-------第22個檔案讀取完畢,平均處理時間2---------------
-------第23個檔案讀取完畢,平均處理時間3---------------
-------第24個檔案讀取完畢,平均處理時間4---------------
-------第25個檔案讀取完畢,平均處理時間3---------------
-------第26個檔案讀取完畢,平均處理時間6---------------
-------第27個檔案讀取完畢,平均處理時間2---------------
-------第28個檔案讀取完畢,平均處理時間2---------------
-------第29個檔案讀取完畢,平均處理時間4---------------
-------第30個檔案讀取完畢,平均處理時間4---------------
-------第31個檔案讀取完畢,平均處理時間4---------------
-------第32個檔案讀取完畢,平均處理時間4---------------
-------第33個檔案讀取完畢,平均處理時間5---------------
-------第34個檔案讀取完畢,平均處理時間3---------------
-------第35個檔案讀取完畢,平均處理時間3---------------
-------第36個檔案讀取完畢,平均處理時間4---------------
-------第37個檔案讀取完畢,平均處理時間3---------------
-------第37個檔案讀取完畢,檔案處理完成---------------
-------共37個檔案讀取完畢,共125---------------
the efficiency is clearly better,rate is about 1.5MB/s

-------第1個檔案讀取完畢,平均處理時間0---------------

-------第41個檔案讀取完畢,平均處理時間0---------------
-------第42個檔案讀取完畢,平均處理時間1---------------
-------第43個檔案讀取完畢,平均處理時間0---------------

-------第100個檔案讀取完畢,平均處理時間0---------------
-------第101個檔案讀取完畢,平均處理時間1---------------
-------第102個檔案讀取完畢,平均處理時間0---------------

-------第150個檔案讀取完畢,平均處理時間0---------------
-------第151個檔案讀取完畢,平均處理時間1---------------
-------第152個檔案讀取完畢,平均處理時間0---------------

-------第191個檔案讀取完畢,平均處理時間0---------------
-------第191個檔案讀取完畢,檔案處理完成---------------
-------共191個檔案讀取完畢,共91---------------
doesn’t even use much time !!rate is like 2MB/s!

then I tried 2MB and 0.5MB,
rate were 2BM/s and 2.5MB/s.

so I guess it’s the smaller,the faster…seriously…