image

Làm thế nào để xóa lượng lớn file trong Bucket của Cloud Storage?

Việc lưu trữ các file trên Cloud Storage rất hữu ích trên GCP. Chia sẻ – phân quyền- truy cập tốc độ cao… Nhưng lưu trữ trên Cloud Storage ít thì không sao nhưng với số lượng nhiều thì mình sẽ tốn một chi phí kha khá cho việc lưu trữ này.

Ví dụ: Trong quá trình develop một ứng dụng phân lớp ảnh (Image Classification), chúng ta cần một số lượng lớn các file ảnh- càng nhiều mẫu thì mô hình kết quả càng chính xác. Sau khi có được model mong muốn rồi, mình sẽ xóa các file huấn luyện đi để tiết kiệm chi phí. Mặc dù dung lượng mỗi file tầm vài KB nhưng khi số lượng file lớn – vài ngàn file thì việc xóa hết thì mình cũng mất khá nhiều thời gian.

Mình thử xem thời gian mà mình xóa 1 file có dung lượng 64KB

Hình 1: Thời gian execute xóa 1 file đơn lẻ.

Giả sử mình có 100.000 file ảnh, cho trung bình xóa 1 file đơn lẻ mất 4 giây. Có khi nào các bạn hỏi tại sao xóa 1 file ảnh đơn mà mất 4s. Lâu đúng không nào ? Nguyên nhân 1 phần do khi thao tác trên file trên Cloud Storage mất nhiều bước như session, login, permission,… chi tiết như thế nào thì các bạn nên tìm hiểu thêm nhé !!!.

Nếu 1 file ảnh đơn lẻ mà chúng ta mất 4s với 100.000 file thì chúng ta sẽ mất là (100.000 * 4) / 3.600 ~ 83.33 giờ. Một con số mà mình không mong muốn. Vậy làm sao để xóa nhiều file một cách hiệu quả, tiết kiệm tối đa công sức và tiền bạc. !!

Google SDK có cung cấp một số lệnh và option hiệu quả để mà xóa file trên Cloud Storage. Sau đây là một số cách xóa file hiệu quả

Trước khi xem các cách xóa file hiệu quả thì có điểm lưu ý là khi bạn xóa một file trên Cloud Storage thì sẽ không khôi phục lại được nhé!!. Một khi đã đi là không trở lại đâu, nên hết sức cẩn thận.

Và một điềm cần lưu ý nữa là các lệnh này được execute trên Shell của GCP nhé

Cách 1: Xóa file với multi-threaded/multi-processing
gsutil -m rm -r -f gs://buckect-cần xóa

Trong đó:

  • -m: xóa file với multi-thread chạy cùng lúc
  • -r: xóa cả thư mục con
  • rm: lệnh remove

Câu lệnh phải có tham số -m để chạy multi-thread thì việc xóa sẽ nhanh hơn không có -m

Hình 2: Xóa 100 file với multi-thread mất tầm 9s
Cách 2: Sync thư mục/ bucket
  • Bước 1 : Tạo mới 1 thư mục hoăc bucket trống
  • Bước 2: sync nó vào thư mục cần xóa
    • gsutil -m rsync -r -d {thư mục /bucket nguồn} {bucket đích}
    • ví du:
      • gsutil -m rsync -r -d gs://rm-bucket-data gs://cavn-demopj-vcm/fashionmnist

Trong đó:

  • -m : chạy multithread
  • -r : đồng bộ cả thư mục con
  • -d: xóa file trong trong url_đích nhưng không có trong url_nguồn.
  • rsync : lệnh đồng bộ thư mục.

Cách này thì phải cực kỳ cẩn thận, đừng để nhầm lẫn giữa
thư mục /bucket nguồnbucket đích

Cách 3: Thêm rule để GCP tự làm.

Cách này xem ra khá hiệu quả đối với những muốn xóa Bucket mà sử dụng 2 cách ở trên có thể mất vài giờ hoặc thậm chí vài ngày. !!

  • Bước 1: Tạo mới một Bucket mới.
  • Bước 2: Move folders/files cần xóa vào Bucket mới tạo
    • gsutil -m mv -r gs://url_source gs://url_dist
  • Bước 3: Add lifecycle rule cho Bucket cần xóa
  • Bước 4: Kiểm tra kết quả (sau 24h)

Theo cách này thì tối đa 24h thì dữ liệu của bạn sẽ bị xóa sạch. Ngoài điều kiện chọn option là Age, bạn còn có thể chọn Creation date, Live state,… và thao tác Delete, bạn cũng có thể chon Set to Coldline / Nearline tùy theo nhu cầu của bạn.

Tham khảo

Liên hệ ngay với chúng tôi, Cloud Ace Việt Nam để được tư vấn về G Suite, Google Cloud Platform (GCP).

Comments are closed.