thảo luận Cách để insert file csv hơn 5M bản ghi vào 1 table (java, postgreSQL) ?

  • Người tạo chủ đề Người tạo chủ đề T.dragon
  • Ngày bắt đầu Ngày bắt đầu

T.dragon

Junior Member
Em chào mọi người. Em đang tìm hiểu về bài toán trên. Mọi người có thể chia sẻ về cách thức hiện tại mọi người đang làm ko ạ.
1 vài bước em tìm thấy là:

Step 1: Xóa hết constraint, index của table đó trước khi insert và tạo lại các constraint ngay sau khi insert xong
Step 2: Dùng " Insert into table (col1, col2) values (val1, val2), (val3, val4), ..." thay vì tạo từng câu Insert cho từng bản ghi.
Step 3: Insert từng batch (ví dụng 1000 row 1 lần) và mỗi batch mở 1 connection. (Sẽ ko dùng 1 connection cho tất cả 1M bản ghi).
Step4: Set AutoCommit = false, sẽ tự commit sau mỗi lần insert xong 1 batch.
 
Em chào mọi người. Em đang tìm hiểu về bài toán trên. Mọi người có thể chia sẻ về cách thức hiện tại mọi người đang làm ko ạ.
1 vài bước em tìm thấy là:

Step 1: Xóa hết constraint, index của table đó trước khi insert và tạo lại các constraint ngay sau khi insert xong
Step 2: Dùng " Insert into table (col1, col2) values (val1, val2), (val3, val4), ..." thay vì tạo từng câu Insert cho từng bản ghi.
Step 3: Insert từng batch (ví dụng 1000 row 1 lần) và mỗi batch mở 1 connection. (Sẽ ko dùng 1 connection cho tất cả 1M bản ghi).
Step4: Set AutoCommit = false, sẽ tự commit sau mỗi lần insert xong 1 batch.
Nhờ con chatgpt viết một script python đọc file, gen ra câu insert rồi execute. Tùy biến thời gian nghỉ, tên cột, thứ tự.... tùy thích.
Edit: À ko đọc title, nhờ con chatgpt nó gen cho cái code đọc file rồi process từng dòng -> import thôi
 
Sửa lần cuối:
về cơ bản thế ok r nhưng k hiểu sao fai xoá index r tạo lại, với nghiên cứu 1 số db có câu lệnh copy csv luôn + đọc file stream
 
về cơ bản thế ok r nhưng k hiểu sao fai xoá index r tạo lại, với nghiên cứu 1 số db có câu lệnh copy csv luôn + đọc file stream
về cái xóa index thì em có đọc được là khi vừa insert vừa index cho từng bản ghi sẽ chậm hơn là insert xong rồi đánh index 1 thể a.
 
về cái xóa index thì em có đọc được là khi vừa insert vừa index cho từng bản ghi sẽ chậm hơn là insert xong rồi đánh index 1 thể a.
Chú ngó qua cái này chưa:

Có thể vẫn phải tạo constraints với indexes sau khi chạy 'copy' cho nhanh hơn
 
Có 3 phần cần quan tâm và ảnh hưởng đến việc nhanh/chậm:
1-load data từ tầng application vào memory
2-đẩy data từ application layer vào DB
3-DB xử lý insert
Bạn chia ra bench-mark xem 3 phần này tốn bao nhiêu thời gian mỗi phần, sau đó tối ưu từng phần dựa trên context hiện tại của bạn.
 
về cái xóa index thì em có đọc được là khi vừa insert vừa index cho từng bản ghi sẽ chậm hơn là insert xong rồi đánh index 1 thể a.
index nó apply cho cả table gồm cả record cũ, nếu xoá đi chỉ để ghi 5mb chắc khoảng 5s thì có đáng k, vì nó có impact nếu db vẫn đang đc sử dụng.
mà nếu db k cần đc sử dụng thường xuyên thế thì cần gì phức tạp hoá chỉ để giải quyết vấn đề k tồn tại :)
 
B đang làm 1 ứng dụng từ java để copy csv vào table hay đây là giải pháp của b? Nếu không thì cứ copy thẳng vào table thôi là được mà!

via theNEXTvoz for iPhone
 
lên chatgpt nó viết cho. viết xong nhớ test cẩn thận là đc. mấy task này nó dư sức rồi
 

Thống kê chủ đề

Ngày tạo
T.dragon,
Người trả lời cuối
Canhtx,
Trả lời
10
Lượt xem
1.301
Quay lại
Lên đầu trang