Streaming API এর মাধ্যমে Performance Optimization

Streaming API ব্যবহার - জ্যাকসন (Jackson) - Java Technologies

282

Jackson Streaming API JSON ডেটা প্রসেসিংয়ের জন্য একটি লো-লেভেল এবং মেমরি-অপ্টিমাইজড পদ্ধতি প্রদান করে। এটি বিশেষভাবে উপযোগী যখন ডেটাসেট খুব বড় হয় বা লো-লেভেল কন্ট্রোল প্রয়োজন হয়।


Streaming API কেন ব্যবহার করবেন?

  1. লাইটওয়েট এবং দ্রুত: Streaming API, DOM এবং Data Binding পদ্ধতির তুলনায় দ্রুত কারণ এটি মেমোরিতে সম্পূর্ণ JSON লোড না করে একটি স্ট্রিম হিসেবে JSON প্রসেস করে।
  2. মেমরি অপ্টিমাইজড: বড় JSON ফাইল নিয়ে কাজ করার সময় মেমরি খরচ কম হয়।
  3. Partial Processing: পুরো JSON প্রসেস করার প্রয়োজন না হলে নির্দিষ্ট অংশ পড়তে বা লিখতে সুবিধা হয়।

1. Streaming API: দুটি প্রধান অংশ

(a) JsonParser: JSON ডেটা পড়ার জন্য।

(b) JsonGenerator: JSON ডেটা লেখার জন্য।


2. উদাহরণ: JsonParser দিয়ে JSON পড়া

নিচে একটি উদাহরণ দেওয়া হলো যেখানে Streaming API ব্যবহার করে JSON ডেটা পার্স করা হয়েছে।

import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;

import java.io.File;
import java.io.IOException;

public class JacksonStreamingReadExample {
    public static void main(String[] args) {
        JsonFactory jsonFactory = new JsonFactory();

        try (JsonParser parser = jsonFactory.createParser(new File("data.json"))) {
            while (!parser.isClosed()) {
                JsonToken token = parser.nextToken();

                if (token == null) {
                    break;
                }

                if (JsonToken.FIELD_NAME.equals(token)) {
                    String fieldName = parser.getCurrentName();
                    parser.nextToken(); // Move to the value

                    if ("name".equals(fieldName)) {
                        System.out.println("Name: " + parser.getValueAsString());
                    } else if ("age".equals(fieldName)) {
                        System.out.println("Age: " + parser.getValueAsInt());
                    }
                }
            }
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

JSON ইনপুট (data.json):

{
  "name": "John Doe",
  "age": 30,
  "address": {
    "street": "123 Main St",
    "city": "Dhaka"
  }
}

আউটপুট:

Name: John Doe
Age: 30

3. উদাহরণ: JsonGenerator দিয়ে JSON লেখা

নিচে একটি উদাহরণ দেওয়া হলো যেখানে Streaming API ব্যবহার করে JSON ডেটা তৈরি করা হয়েছে।

import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonGenerator;

import java.io.File;
import java.io.IOException;

public class JacksonStreamingWriteExample {
    public static void main(String[] args) {
        JsonFactory jsonFactory = new JsonFactory();

        try (JsonGenerator generator = jsonFactory.createGenerator(new File("output.json"))) {
            generator.writeStartObject(); // Start JSON Object

            generator.writeStringField("name", "John Doe");
            generator.writeNumberField("age", 30);

            generator.writeFieldName("address");
            generator.writeStartObject(); // Start nested object
            generator.writeStringField("street", "123 Main St");
            generator.writeStringField("city", "Dhaka");
            generator.writeEndObject(); // End nested object

            generator.writeEndObject(); // End JSON Object
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
}

আউটপুট (output.json):

{
  "name": "John Doe",
  "age": 30,
  "address": {
    "street": "123 Main St",
    "city": "Dhaka"
  }
}

4. Performance Optimization টিপস

(a) Chunked Processing:

বড় JSON ফাইল সরাসরি মেমোরিতে না নিয়ে স্ট্রিম হিসেবে প্রসেস করুন।

try (JsonParser parser = jsonFactory.createParser(new File("large.json"))) {
    while (parser.nextToken() != JsonToken.END_OBJECT) {
        // শুধুমাত্র প্রয়োজনীয় ডেটা পড়ুন
    }
}

(b) Avoid DOM-based Processing:

ObjectMapper দিয়ে পুরো JSON লোড না করে Streaming API ব্যবহার করুন।

(c) Lazy Loading:

জ্যাকসনের JsonParser মডেল ব্যবহার করলে প্রয়োজনীয় ডেটা Lazy Load করতে পারেন।


5. Use Cases

  • Big Data Processing: বিশাল JSON ডেটা ফাইল প্রসেস করা।
  • Low Memory Environments: সীমিত মেমরি ব্যবহার করে ডেটা পার্স করা।
  • Partial Updates: JSON ফাইলের নির্দিষ্ট অংশ আপডেট করা।

6. সীমাবদ্ধতা

  • কোড জটিলতা: Streaming API ব্যবহার করলে কোড কিছুটা জটিল হতে পারে।
  • Manual Handling: প্রতিটি JSON টোকেন ম্যানুয়ালি প্রসেস করতে হয়।

Jackson Streaming API, বড় JSON ডেটা প্রসেসিং এবং মেমরি অপ্টিমাইজেশনের জন্য একটি শক্তিশালী টুল। তবে এটি ব্যবহারের জন্য লো-লেভেল লজিক লিখতে হয়। যদি আপনার ডেটাসেট বড় বা মেমরি সীমাবদ্ধতা থাকে, তবে এটি একটি আদর্শ সমাধান।

Content added By
Promotion

Are you sure to start over?

Loading...