Khi xuất một kết xuất dữ liệu lớn, mối quan tâm lớn nhất của bạn là giảm thiểu các lỗi. Ngay cả khi bạn có thể bão hòa kết nối mạng GB, việc di chuyển 10 TB dữ liệu sẽ mất> 24 giờ. Bạn không muốn phải khởi động lại do lỗi (chẳng hạn như hết thời gian kết nối cơ sở dữ liệu).
Điều này ngụ ý rằng bạn nên chia quá trình xuất thành nhiều phần. Bạn có thể thực hiện việc này bằng cách thêm dải ID vào câu lệnh chọn bên trong bản sao (Tôi vừa chỉnh sửa ví dụ của bạn, vì vậy có thể có lỗi):
COPY (SELECT (ID, NAME, ADDRESS) FROM CUSTOMERS WHERE ID BETWEEN 0 and 1000000) TO ‘CUSTOMERS_DATA_0.CSV WITH DELIMITER '|' CSV;
Tất nhiên, bạn sẽ tạo ra những câu lệnh này bằng một chương trình ngắn; đừng quên thay đổi tên của tệp đầu ra cho mỗi tệp. Tôi khuyên bạn nên chọn một dải ID cung cấp cho bạn một gigabyte hoặc hơn cho mỗi tệp đầu ra, dẫn đến 10.000 tệp trung gian.
Nơi bạn viết các tệp này là tùy thuộc vào bạn. Nếu S3FS đủ đáng tin cậy, tôi nghĩ đó là một ý kiến hay.
Bằng cách chia phần dỡ tải thành nhiều phần nhỏ hơn, bạn cũng có thể chia nó cho nhiều trường hợp EC2. Bạn có thể sẽ làm bão hòa băng thông của máy cơ sở dữ liệu chỉ với một vài trình đọc. Cũng xin lưu ý rằng AWS tính phí 0,01 đô la mỗi GB cho việc truyền dữ liệu xuyên AZ - với 10TB là 100 đô la - vì vậy hãy đảm bảo rằng các máy EC2 này ở cùng AZ như máy cơ sở dữ liệu.
Điều đó cũng có nghĩa là bạn có thể thực hiện việc dỡ tải trong khi cơ sở dữ liệu không bận (tức là ngoài giờ làm việc bình thường).
Cuối cùng, điều đó có nghĩa là bạn có thể kiểm tra quy trình của mình và bạn có thể sửa bất kỳ lỗi dữ liệu nào mà không cần phải chạy toàn bộ quá trình xuất (hoặc xử lý 10TB dữ liệu cho mỗi lần sửa).
Về phía nhập, Redshift có thể tải nhiều các tệp song song . Điều này sẽ cải thiện thời gian tổng thể của bạn, mặc dù tôi thực sự không thể nói rõ là bao nhiêu.
Một lưu ý: sử dụng tệp kê khai chứ không phải là tiền tố tên đối tượng. Tôi đã gặp phải những trường hợp mà tính nhất quán cuối cùng của S3 khiến các tệp bị giảm trong quá trình tải.