so sánh Super CSV và Jackson CSV thì cái nào hỗ trợ xuất file nhanh hơn
Để so sánh tốc độ giữa Super CSV và Jackson CSV khi xuất 1,000,000 bản ghi, bạn có thể chạy thử nghiệm bằng cách sử dụng cả hai thư viện và đo thời gian thực hiện. Dưới đây là mã nguồn để thực hiện thử nghiệm này:
Super CSV#
` import org.supercsv.io.CsvBeanWriter; import org.supercsv.io.ICsvBeanWriter; import org.supercsv.prefs.CsvPreference;
import java.io.FileWriter; import java.io.IOException; import java.util.Random;
public class SuperCSVExporter { public static void main(String[] args) { String csvFile = "data_supercsv.csv"; int numberOfRows = 1000000;
long startTime = System.currentTimeMillis();
try (ICsvBeanWriter beanWriter = new CsvBeanWriter(new FileWriter(csvFile), CsvPreference.STANDARD_PREFERENCE)) {
String[] header = {"ID", "Name", "Age"};
beanWriter.writeHeader(header);
Random random = new Random();
for (int i = 1; i <= numberOfRows; i++) {
String[] data = {
String.valueOf(i),
"Name" + i,
String.valueOf(random.nextInt(100))
};
beanWriter.write(data, header);
}
System.out.println("File CSV đã được tạo thành công!");
} catch (IOException e) {
e.printStackTrace();
}
long endTime = System.currentTimeMillis();
System.out.println("SuperCSV runtime: " + (endTime - startTime) + " ms");
}
} `
Jackson CSV#
` import com.fasterxml.jackson.dataformat.csv.CsvMapper; import com.fasterxml.jackson.dataformat.csv.CsvSchema;
import java.io.File; import java.io.IOException; import java.util.ArrayList; import java.util.List; import java.util.Random;
class Person { public int ID; public String Name; public int Age;
public Person(int ID, String Name, int Age) {
this.ID = ID;
this.Name = Name;
this.Age = Age;
}
}
public class JacksonCSVExporter { public static void main(String[] args) { String csvFile = "data_jackson.csv"; int numberOfRows = 1000000;
long startTime = System.currentTimeMillis();
List<Person> persons = new ArrayList<>();
Random random = new Random();
for (int i = 1; i <= numberOfRows; i++) {
persons.add(new Person(i, "Name" + i, random.nextInt(100)));
}
CsvMapper mapper = new CsvMapper();
CsvSchema schema = mapper.schemaFor(Person.class).withHeader();
try {
mapper.writer(schema).writeValue(new File(csvFile), persons);
System.out.println("File CSV đã được tạo thành công!");
} catch (IOException e) {
e.printStackTrace();
}
long endTime = System.currentTimeMillis();
System.out.println("Jackson CSV runtime: " + (endTime - startTime) + " ms");
}
} `
Kết quả so sánh:#
Sau khi chạy hai đoạn mã trên, bạn sẽ có được thời gian thực hiện cho mỗi thư viện. Dưới đây là cách phân tích kết quả:
Hiệu suất: Thư viện nào có thời gian thực hiện ngắn hơn thì nhanh hơn khi xuất 1,000,000 bản ghi.
Tài nguyên sử dụng: Bạn cũng có thể kiểm tra mức độ sử dụng CPU và bộ nhớ trong quá trình xuất file để có cái nhìn toàn diện hơn.
Thực tế:#
Dựa trên kinh nghiệm và các báo cáo khác nhau, Jackson CSV thường có hiệu suất tốt hơn khi xử lý số lượng lớn dữ liệu vì nó được tối ưu hóa cao cho việc chuyển đổi đối tượng Java thành CSV. Tuy nhiên, Super CSV cũng rất hiệu quả và có thể gần như tương đương trong nhiều trường hợp.
Kết luận:#
Để có kết quả chính xác nhất, bạn nên chạy thử nghiệm trên môi trường của mình vì hiệu suất có thể thay đổi tùy thuộc vào cấu hình hệ thống và dữ liệu cụ thể. Dựa trên kết quả thực nghiệm, bạn sẽ biết thư viện nào phù hợp hơn cho nhu cầu của bạn.