SXSSF (Streaming XML Spreadsheet Format) হল Apache POI এর একটি বিশেষ মডিউল যা খুব বড় Excel (.xlsx) ফাইলের জন্য উপযুক্ত। এটি মূলত XSSF এর উপর ভিত্তি করে তৈরি, তবে বড় ডেটাসেট পরিচালনা করার জন্য এটি আরও মেমরি-সংরক্ষণশীল। SXSSF ব্যবহার করে আপনি খুব বড় পরিমাণ ডেটা একসাথে মেমোরিতে লোড না করে Excel ফাইল তৈরি করতে পারেন। এটি বড় Excel ফাইল তৈরি ও লেখার সময় ফাইল লেখার পদ্ধতি পরিবর্তন করে, যাতে মেমোরি ব্যবহারের পরিমাণ কম থাকে।
SXSSF শুধুমাত্র write অপারেশন সমর্থন করে এবং লেখার সময় একে একে ডেটা stream করে, যাতে memory efficiency বজায় থাকে।
SXSSF দিয়ে বড় ডেটাসেট নিয়ে কাজ করার উপায়
1. SXSSF এর মৌলিক ধারণা
- SXSSF ব্যবহার করলে আপনার ডেটাসেটের প্রতিটি রো তৈরি করার সময় তা মেমোরিতে রাখা হয় না। বরং প্রতিটি রো লিখে দেওয়ার পরে সেটি মেমোরি থেকে মুছে ফেলা হয়। এই কারণে, বড় ডেটাসেট নিয়ে কাজ করার সময় এটি খুবই কার্যকরী।
- এই মডিউলে SXSSFWorkbook ব্যবহার করা হয়, যা XSSFWorkbook এর মতই, তবে একে একে ডেটা লেখার জন্য এটি অনেক কম মেমোরি ব্যবহার করে।
- SXSSF শুধুমাত্র লেখার জন্য উপযোগী এবং পড়ার জন্য ব্যবহার করা যায় না। অর্থাৎ, একবার ডেটা লেখার পরে ফাইলটি .xlsx ফরম্যাটে সেভ করে নিতে হয়।
2. SXSSF দিয়ে একটি বড় Excel ফাইল তৈরি করা
SXSSF দিয়ে একটি বড় Excel ফাইল তৈরি করার উদাহরণ দেওয়া হলো যেখানে অনেক রো (যেমন ১০০,০০০) একসাথে লেখার জন্য কাজ করা হয়েছে। এই ফাইলটি মেমোরি ব্যবহার করে না, এবং ডেটা stream করে লেখে।
import org.apache.poi.xssf.streaming.SXSSFWorkbook;
import org.apache.poi.ss.usermodel.*;
import java.io.FileOutputStream;
import java.io.IOException;
public class LargeExcelFileCreator {
public static void main(String[] args) throws IOException {
// Create a new SXSSFWorkbook (Streaming XML Workbook)
SXSSFWorkbook workbook = new SXSSFWorkbook(100); // Keep 100 rows in memory at a time
Sheet sheet = workbook.createSheet("Large Data");
// Write header row
Row header = sheet.createRow(0);
header.createCell(0).setCellValue("ID");
header.createCell(1).setCellValue("Name");
header.createCell(2).setCellValue("Age");
// Write data rows
for (int i = 1; i <= 100000; i++) {
Row row = sheet.createRow(i);
row.createCell(0).setCellValue(i); // ID
row.createCell(1).setCellValue("Name " + i); // Name
row.createCell(2).setCellValue(20 + (i % 30)); // Age (20-50)
}
// Write the workbook to a file
try (FileOutputStream fileOut = new FileOutputStream("large_data.xlsx")) {
workbook.write(fileOut);
}
// Dispose of temporary files created by SXSSFWorkbook
workbook.dispose();
}
}
কোড ব্যাখ্যা:
- SXSSFWorkbook: এটি Streaming XML Workbook এবং এতে 100 মানে হচ্ছে, প্রতিটি ১০০টি রো মেমোরিতে থাকবে। এর পরবর্তী রো লেখার সময় পুরনো রো মেমোরি থেকে মুছে ফেলা হবে।
- CreateSheet(): একটি নতুন শিট তৈরি করা হচ্ছে।
- CreateRow(): প্রতিটি রো তৈরি করা হচ্ছে।
- Cell Creation: প্রতিটি সেলে ডেটা লিখা হচ্ছে।
- File Output: পুরো workbook ফাইল আউটপুটে লেখা হচ্ছে।
- Dispose(): এটি সমস্ত মেমোরি ক্লিয়ার করে, যাতে SXSSFWorkbook সঠিকভাবে কাজ করতে পারে এবং মেমোরি ফাঁকা থাকে।
3. SXSSF-এর সুবিধা এবং সীমাবদ্ধতা
সুবিধা:
- Memory Efficiency: বড় ডেটাসেট (যেমন লক্ষ লক্ষ রো) পরিচালনা করার জন্য মেমোরি ব্যবহার অনেক কম থাকে। এটি streaming পদ্ধতি ব্যবহার করে একে একে ডেটা লেখার মাধ্যমে মেমোরি ব্যবহার কমায়।
- Large File Creation: বিশাল Excel ফাইল তৈরি করার সময় দ্রুত কাজ করে এবং মেমোরি ব্যবহারের পরিমাণ কম থাকে।
- No Need to Load Entire Data: সমস্ত ডেটা একবারে মেমোরিতে লোড করতে হয় না, যা বড় ডেটাসেট নিয়ে কাজ করার জন্য উপকারী।
সীমাবদ্ধতা:
- Read Operations Not Supported: SXSSF শুধুমাত্র লেখার জন্য ব্যবহৃত হয়, আপনি এটি দিয়ে ডেটা পড়তে পারবেন না। পড়ার জন্য আপনাকে XSSF ব্যবহার করতে হবে।
- Limited to Writing: SXSSF শুধুমাত্র লেখার জন্য, অর্থাৎ একে একে ডেটা লেখার জন্য ব্যবহার করা হয়। পড়া বা সম্পাদনা করার জন্য আপনাকে অন্য মডিউল ব্যবহার করতে হবে।
4. SXSSF-এর Performance টিউনিং
- Row Buffering: SXSSF দিয়ে অনেক রো লেখার সময় 100 রো পর্যন্ত মেমোরিতে রেখে, তার পরবর্তী রো লেখার জন্য পূর্ববর্তী রো মুছে ফেলা হয়। এই সংখ্যাটি আপনার মেমোরির উপর নির্ভর করে অ্যাডজাস্ট করা যেতে পারে। আপনি যদি কম মেমোরি ব্যবহার করতে চান, তবে এই সংখ্যা কমিয়ে দিতে পারেন।
- File Writer Buffering: ফাইল লেখার জন্য BufferedOutputStream ব্যবহার করা যেতে পারে, যা আরও দ্রুত লেখার জন্য সাহায্য করবে।
BufferedOutputStream bufferedOut = new BufferedOutputStream(new FileOutputStream("large_data.xlsx"));
workbook.write(bufferedOut);
bufferedOut.close();
সারাংশ
SXSSF একটি অত্যন্ত কার্যকরী মডিউল যখন আপনি বড় Excel (.xlsx) ডেটাসেট নিয়ে কাজ করছেন। এটি মেমোরি ব্যবহারের পরিমাণ কমাতে সহায়তা করে এবং বড় ফাইল দ্রুত এবং কার্যকরীভাবে তৈরি করতে পারে। তবে, এটি শুধুমাত্র লেখার জন্য ব্যবহৃত হয় এবং read অপারেশন সমর্থন করে না। SXSSF দিয়ে আপনি খুব সহজে বড় ডেটাসেট লেখার সময় মেমোরি ব্যবহারের পরিমাণ নিয়ন্ত্রণ করতে পারেন।
Read more