Quay lại Blog Blog

Kinh nghiệm xử lý tải lên tệp CSV kích thước lớn (5GB) với các ràng buộc kiểm tra phức tạp

Kinh nghiệm xử lý tải lên tệp CSV kích thước lớn (5GB) với các ràng buộc kiểm tra phức tạp

Người thực hiện: Tôn Thất Bách (Technical Leader tại Mynavi TechTus Vietnam)

Bài toán đặt ra

Hệ thống cần hỗ trợ người dùng tải lên các tệp CSV có dung lượng rất lớn, lên đến 5GB. Tuy nhiên, việc tiếp nhận dữ liệu chỉ là bước đầu. Quan trọng hơn, hệ thống phải kiểm tra toàn bộ nội dung của tệp và chỉ cho phép những dữ liệu hợp lệ được đưa vào cơ sở dữ liệu. Trong quá trình kiểm tra, hệ thống cần phát hiện và ghi nhận đầy đủ các lỗi như:

  • Giá trị ở một cột vượt quá 200 ký tự.
  • Xuất hiện các ký tự đặc biệt không hợp lệ.
  • Các cột yêu cầu giá trị duy nhất nhưng bị trùng lặp, bao gồm cả trùng trong chính tệp CSV và trùng với dữ liệu đã tồn tại trong cơ sở dữ liệu.

Sau khi quá trình kiểm tra hoàn tất, người dùng sẽ nhận được báo cáo chi tiết, bao gồm số dòng xảy ra lỗi, nguyên nhân và giá trị gây ra lỗi để có thể chỉnh sửa và tải lên lại.

Giải pháp

Để xử lý hiệu quả những tệp CSV có kích thước lớn mà vẫn đảm bảo hiệu năng, quy trình được chia thành bốn bước.

Bước 1. Tải tệp lên Amazon S3

Thay vì gửi trực tiếp tệp đến máy chủ ứng dụng, Frontend sẽ tải tệp lên Amazon S3. Cách làm này giúp giảm tải cho Backend và cho phép xử lý những tệp có dung lượng rất lớn. Sau khi quá trình tải lên hoàn tất, hệ thống sẽ tự động kích hoạt quy trình kiểm tra dữ liệu thông qua EventBridge hoặc gửi yêu cầu đến Backend.

Bước 2. Kiểm tra dữ liệu bằng xử lý hàng loạt

Đây là bước quan trọng nhất của toàn bộ quy trình. Thay vì đọc từng dòng CSV bằng mã nguồn ứng dụng, hệ thống sẽ tận dụng khả năng xử lý dữ liệu của cơ sở dữ liệu để kiểm tra hàng triệu bản ghi nhanh hơn và hiệu quả hơn. Quy trình gồm các bước sau:

  • Tạo bảng tạm: Trước tiên, hệ thống tạo một bảng tạm có cấu trúc giống với tệp CSV. Ngoài các cột dữ liệu, bảng này còn bổ sung thêm một số trường để lưu thông tin phục vụ kiểm tra, chẳng hạn như số dòng, trạng thái lỗi hoặc loại lỗi. Bảng tạm đóng vai trò như một “khu vực kiểm tra”, giúp hệ thống xác thực dữ liệu trước khi đưa vào bảng chính.
  • Nạp dữ liệu vào bảng tạm: Sau khi tạo bảng, toàn bộ dữ liệu từ tệp CSV sẽ được nạp vào bằng lệnh LOAD DATA LOCAL INFILE. Đây là một trong những cách nhanh nhất để import dữ liệu với số lượng lớn. Trong quá trình này, hệ thống có thể tạm thời vô hiệu hóa các chỉ mục (Index) để tăng tốc độ ghi dữ liệu, sau đó kích hoạt lại khi việc import hoàn tất.
  • Kiểm tra dữ liệu: Khi dữ liệu đã nằm trong bảng tạm, việc kiểm tra sẽ được thực hiện hoàn toàn bằng các câu lệnh SQL. Hệ thống sẽ lần lượt:
    • Xác định các dòng có dữ liệu không hợp lệ.
    • Kiểm tra những giá trị bị trùng lặp ngay trong tệp CSV.
    • Đối chiếu với bảng dữ liệu chính để phát hiện các giá trị đã tồn tại.

Sau khi hoàn tất, hệ thống tổng hợp tất cả lỗi và tạo báo cáo để trả về cho người dùng.

Bước 3. Ghi dữ liệu hợp lệ vào bảng chính

Sau khi quá trình kiểm tra kết thúc, chỉ những bản ghi không có lỗi mới được ghi vào cơ sở dữ liệu chính. Tùy theo yêu cầu nghiệp vụ, có thể sử dụng INSERT INTO để thêm mới hoặc REPLACE INTO nếu cần ghi đè dữ liệu đã tồn tại.

Bước 4. Dọn dẹp dữ liệu tạm

Khi toàn bộ quá trình hoàn tất, bảng tạm sẽ được xóa để giải phóng tài nguyên và chuẩn bị cho những lần import tiếp theo.

Một số lưu ý để tối ưu hiệu năng

Khi xử lý các tệp CSV có dung lượng lớn, một vài kinh nghiệm dưới đây sẽ giúp hệ thống hoạt động hiệu quả hơn:

  • Tạm thời vô hiệu hóa Index trước khi import dữ liệu và kích hoạt lại sau khi hoàn tất để tăng tốc độ ghi.
  • Đảm bảo tệp CSV sử dụng mã hóa UTF-8 và không chứa ký tự BOM nhằm tránh lỗi khi đọc dữ liệu.
  • Hạn chế kiểm tra dữ liệu từng dòng bằng mã nguồn ứng dụng. Thay vào đó, nên tận dụng các câu lệnh SQL để xử lý hàng loạt vì cơ sở dữ liệu được tối ưu cho các tác vụ này.
  • Nên tổng hợp toàn bộ lỗi trong một lần xử lý để người dùng có thể sửa tất cả các vấn đề cùng lúc, thay vì phải tải lên nhiều lần.

Kết luận

Xử lý một tệp CSV có dung lượng vài gigabyte không đơn giản là tăng giới hạn kích thước tệp được phép tải lên. Thách thức thực sự nằm ở việc làm thế nào để hệ thống có thể kiểm tra hàng triệu bản ghi nhanh chóng, phát hiện đầy đủ các lỗi và chỉ ghi những dữ liệu hợp lệ vào cơ sở dữ liệu. Một quy trình xử lý hợp lý, kết hợp giữa lưu trữ trên Amazon S3, xử lý hàng loạt bằng SQL và sử dụng bảng tạm để xác thực dữ liệu sẽ giúp hệ thống vừa đảm bảo hiệu năng, vừa dễ dàng mở rộng khi khối lượng dữ liệu ngày càng tăng.

Bạn muốn đồng hành cùng chúng tôi?

Khám phá các cơ hội nghề nghiệp, môi trường làm việc năng động và chế độ đãi ngộ hấp dẫn tại Mynavi TechTus Vietnam.

Khám phá vị trí đang tuyển