Large JSON Files এর জন্য Performance Optimization

Gson এর Performance Optimization - জিসন (Gson) - Java Technologies

342

Gson ব্যবহার করে বড় JSON ফাইল পার্স এবং সিরিয়ালাইজ করার সময় পারফরম্যান্স উন্নত করার জন্য কিছু কৌশল এবং অপটিমাইজেশন পদ্ধতি ব্যবহার করা যেতে পারে। বড় JSON ফাইল নিয়ে কাজ করার সময়, সাধারণত মেমরি ব্যবহারের কার্যকারিতা, প্রক্রিয়া চলাকালীন টাইম, এবং JSON ডাটা হ্যান্ডলিং এর পারফরম্যান্স গুরুত্বপূর্ণ হয়ে ওঠে। নিম্নলিখিত পদ্ধতিগুলি Gson দিয়ে বড় JSON ফাইলের পারফরম্যান্স অপটিমাইজ করতে সহায়ক হবে।

1. Streaming API ব্যবহার করা

Gson-এর Streaming API (যেমন, JsonReader এবং JsonWriter) একটি উন্নত পদ্ধতি, যা বড় JSON ডাটাকে স্ট্রীমিংয়ের মাধ্যমে পার্স (পড়তে) বা সিরিয়ালাইজ (লিখতে) করতে সহায়তা করে। এটি সম্পূর্ণ JSON ডাটা একসাথে মেমোরিতে লোড না করে, একের পর এক অংশে JSON ডাটা প্রসেস করার সুযোগ দেয়। এটি খুবই উপকারী যখন JSON ফাইলগুলো বড় এবং আপনি মেমরি বা রেসপন্স টাইম সংরক্ষণ করতে চান।

উদাহরণ: JSON Parsing with JsonReader (Stream Reading)

import com.google.gson.stream.JsonReader;
import java.io.FileReader;
import java.io.IOException;

public class GsonLargeFileReadingExample {
    public static void main(String[] args) throws IOException {
        JsonReader reader = new JsonReader(new FileReader("large_file.json"));
        reader.beginArray();  // Start of JSON array
        while (reader.hasNext()) {
            reader.beginObject();  // Start of JSON object
            while (reader.hasNext()) {
                String name = reader.nextName();
                if (name.equals("name")) {
                    System.out.println("Name: " + reader.nextString());
                } else if (name.equals("age")) {
                    System.out.println("Age: " + reader.nextInt());
                } else {
                    reader.skipValue();  // Skip other values
                }
            }
            reader.endObject();  // End of JSON object
        }
        reader.endArray();  // End of JSON array
        reader.close();
    }
}

ব্যাখ্যা:

  • JsonReader ব্যবহার করার মাধ্যমে আপনি JSON ডাটাকে স্ট্রীমিং মোডে একের পর এক অবজেক্ট বা অ্যারে প্রক্রিয়া করতে পারবেন, মেমোরির ব্যবহার কমিয়ে এনে।
  • আপনি reader.skipValue() ব্যবহার করে JSON এর অপ্রয়োজনীয় বা বড় ফিল্ডগুলো স্কিপ করতে পারেন, যা মেমরি অপটিমাইজেশনে সহায়ক।

2. GsonBuilder দিয়ে excludeFieldsWithoutExposeAnnotation ব্যবহার করা

Gson এ আপনি @Expose অ্যানোটেশন ব্যবহার করে শুধুমাত্র প্রয়োজনীয় ফিল্ডগুলো JSON এ সিরিয়ালাইজ করতে পারেন। যদি আপনার JSON অবজেক্টে অনেকগুলো ফিল্ড থাকে এবং আপনি সেগুলির মধ্যে কিছু বাদ দিতে চান, তাহলে excludeFieldsWithoutExposeAnnotation পদ্ধতি ব্যবহার করা যেতে পারে।

উদাহরণ:

import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import com.google.gson.annotations.Expose;

class Person {
    @Expose
    String name;
    
    @Expose
    int age;
    
    String address;  // This field won't be serialized since it's not annotated with @Expose
}

public class GsonExposeOptimizationExample {
    public static void main(String[] args) {
        Person person = new Person();
        person.name = "John";
        person.age = 30;
        person.address = "123 Main St";

        Gson gson = new GsonBuilder().excludeFieldsWithoutExposeAnnotation().create();

        String json = gson.toJson(person);
        System.out.println(json);
    }
}

আউটপুট:

{"name":"John","age":30}

ব্যাখ্যা:

  • @Expose অ্যানোটেশন ব্যবহার করে আপনি শুধুমাত্র প্রয়োজনীয় ফিল্ডগুলো JSON এ সিরিয়ালাইজ করেছেন। যেহেতু address ফিল্ডে @Expose অ্যানোটেশন নেই, তাই এটি JSON আউটপুটে অন্তর্ভুক্ত হয়নি।
  • excludeFieldsWithoutExposeAnnotation পদ্ধতিটি Gson কে নির্দেশ দেয় যে শুধুমাত্র @Expose অ্যানোটেশনযুক্ত ফিল্ডগুলো সিরিয়ালাইজ করা হবে, যা মেমরি ব্যবহারে পারফরম্যান্স উন্নত করতে সাহায্য করে।

3. TypeAdapter দিয়ে কাস্টম সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন

আপনি TypeAdapter ব্যবহার করে কাস্টম সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন করতে পারেন, যাতে আপনি শুধুমাত্র প্রয়োজনীয় তথ্য প্রক্রিয়া করেন এবং অপ্রয়োজনীয় অংশগুলো বাদ দেন। এছাড়া, আপনি কোনো ফিল্ডের জন্য নির্দিষ্ট রূপান্তরও করতে পারেন যা JSON আউটপুট বা ইনপুট এর সাইজ কমিয়ে দিতে সাহায্য করবে।

উদাহরণ:

import com.google.gson.*;
import java.lang.reflect.Type;

class Person {
    String name;
    int age;

    public Person(String name, int age) {
        this.name = name;
        this.age = age;
    }
}

class PersonTypeAdapter extends TypeAdapter<Person> {
    @Override
    public void write(JsonWriter out, Person person) throws IOException {
        out.beginObject();
        out.name("name").value(person.name);
        out.name("age").value(person.age);
        out.endObject();
    }

    @Override
    public Person read(JsonReader in) throws IOException {
        in.beginObject();
        String name = null;
        int age = 0;
        
        while (in.hasNext()) {
            String fieldName = in.nextName();
            if (fieldName.equals("name")) {
                name = in.nextString();
            } else if (fieldName.equals("age")) {
                age = in.nextInt();
            } else {
                in.skipValue();  // Skip other fields to reduce memory usage
            }
        }
        in.endObject();
        return new Person(name, age);
    }
}

public class GsonTypeAdapterOptimizationExample {
    public static void main(String[] args) {
        Person person = new Person("John", 30);

        Gson gson = new GsonBuilder().registerTypeAdapter(Person.class, new PersonTypeAdapter()).create();

        String json = gson.toJson(person);
        System.out.println(json);

        Person deserializedPerson = gson.fromJson(json, Person.class);
        System.out.println(deserializedPerson.name + " - " + deserializedPerson.age);
    }
}

আউটপুট:

{"name":"John","age":30}
John - 30

ব্যাখ্যা:

  • TypeAdapter ব্যবহার করে কাস্টম সিরিয়ালাইজেশন এবং ডেসিরিয়ালাইজেশন লজিক তৈরি করা হয়েছে। এতে JSON এর অতিরিক্ত ফিল্ডগুলোর মাধ্যমে মেমরি অপটিমাইজ করা সম্ভব।
  • in.skipValue() ব্যবহার করে অপ্রয়োজনীয় ফিল্ডগুলো স্কিপ করা হয়েছে।

4. Buffer Size বাড়ানো (Large File Processing)

গন BufferedReader এবং BufferedWriter ব্যবহার করলে বড় JSON ফাইল পার্স করার সময় আরও ভালো পারফরম্যান্স পাওয়া যায়, কারণ এটি ডাটা একসাথে ছোট অংশে পাঠ এবং লেখার মাধ্যমে মেমরি ব্যবহারে সহায়তা করে।

উদাহরণ:

import com.google.gson.Gson;
import com.google.gson.stream.JsonReader;
import java.io.*;

public class BufferedReaderGsonExample {
    public static void main(String[] args) throws IOException {
        BufferedReader bufferedReader = new BufferedReader(new FileReader("large_file.json"));
        Gson gson = new Gson();

        JsonReader reader = new JsonReader(bufferedReader);
        reader.beginArray();  // Start of JSON array
        while (reader.hasNext()) {
            reader.beginObject();  // Start of JSON object
            while (reader.hasNext()) {
                String name = reader.nextName();
                if (name.equals("name")) {
                    System.out.println("Name: " + reader.nextString());
                }
            }
            reader.endObject();  // End of JSON object
        }
        reader.endArray();  // End of JSON array
        reader.close();
    }
}

5. Lazy Parsing with JsonElement

আপনি যখন JSON ফিল্ডগুলো থেকে শুধুমাত্র কিছু বিশেষ তথ্য চাচ্ছেন, তখন আপনি JsonElement ব্যবহার করে আরও কার্যকরীভাবে JSON পার্স করতে পারেন, যা আপনার পারফরম্যান্স উন্নত করতে সহায়ক।

উদাহরণ:

import com.google.gson.*;

public class LazyParsingWithJsonElement {
    public static void main(String[] args) {
        String json = "{\"name\":\"John\", \"age\":30, \"address\":\"123 Main St\"}";

        JsonElement jsonElement = JsonParser.parseString(json);
        JsonObject jsonObject = jsonElement.getAsJsonObject();

        // Access only the required fields
        String name = jsonObject.get("name").getAsString();
        System.out.println("Name: " + name);
    }
}
  1. Streaming API (JsonReader এবং JsonWriter) ব্যবহার করে আপনি বড় JSON ফাইলগুলির পারফরম্যান্স উন্নত করতে পারেন, কারণ এটি পুরো ডাটা মেমোরিতে লোড না করে একে একে ডাটা প্রক্রিয়া করতে সক্ষম।
  2. GsonBuilder এর সাথে excludeFieldsWithoutExposeAnnotation ব্যবহার করে শুধুমাত্র প্রয়োজনীয় ফিল্ডগুলিকে JSON-এ সিরিয়ালাইজ করা যায়।
  3. Custom TypeAdapters এর মাধ্যমে কাস্টম সিরিয়ালাইজেশন ও ডেসিরিয়ালাইজেশন করে JSON এর অপ্রয়োজনীয় অংশ বাদ দেওয়া যায়, যাতে পারফরম্যান্স উন্নত হয়।
  4. BufferedReader এবং BufferedWriter ব্যবহার করে বড় ফাইলের পারফরম্যান্স উন্নত করা যায়।

এগুলো সবই বড় JSON ফাইলের পারফরম্যান্স অপটিমাইজ করার জন্য গুরুত্বপূর্ণ কৌশল, যা মেমরি ব্যবহারের দক্ষতা এবং প্রক্রিয়া চলাকালীন টাইম কমাতে সাহায্য করবে।

Content added By
Promotion

Are you sure to start over?

Loading...