Tôi có một số tập lệnh hiện đang đọc trong rất nhiều dữ liệu từ một số tệp .CSV. Để có hiệu quả, tôi sử dụng mô-đun Text::CSV_XS để đọc chúng và sau đó tạo một băm bằng cách sử dụng một trong các cột làm chỉ mục. Tuy nhiên, tôi có một số tệp lô và chúng khá lớn. Và mỗi tập lệnh cần đọc trong dữ liệu một lần nữa.Làm cách nào để truy cập dữ liệu trong nhiều tệp CSV lớn một cách nhanh chóng từ Perl?
Câu hỏi đặt ra là: Làm thế nào tôi có thể lưu trữ liên tục các băm Perl này để tất cả chúng có thể được đọc lại với tối thiểu là CPU?
Kết hợp tập lệnh không phải là một tùy chọn. Tôi muốn ...
tôi áp dụng quy tắc 2 của tối ưu hóa và được sử dụng profiling để thấy rằng đại đa số các CPU (khoảng 90%) là ở:
Text::CSV_XS::fields
Text::CSV_XS::Parse
Text::CSV_XS::parse
Vì vậy, tôi đã thực hiện một kịch bản thử nghiệm đọc tất cả các tệp .CSV (Văn bản :: CSV_XS), đã bỏ chúng bằng cách sử dụng mô-đun Storable, sau đó quay lại và đọc lại bằng cách sử dụng mô-đun Storable. Tôi cấu hình này vì vậy tôi có thể nhìn thấy thời gian CPU:
$ c:/perl/bin/dprofpp.bat
Total Elapsed Time = 1809.397 Seconds
User+System Time = 950.5560 Seconds
Exclusive Times
%Time ExclSec CumulS #Calls sec/call Csec/c Name
25.6 243.6 243.66 126 1.9338 1.9338 Storable::pretrieve
20.5 194.9 194.92 893448 0.0002 0.0002 Text::CSV_XS::fields
9.49 90.19 90.198 893448 0.0001 0.0001 Text::CSV_XS::Parse
7.48 71.07 71.072 126 0.5641 0.5641 Storable::pstore
4.45 42.32 132.52 893448 0.0000 0.0001 Text::CSV_XS::parse
(the rest was in terms of 0.07% or less and can be ignored)
Vì vậy, sử dụng storable chi phí khoảng 25,6% để tải lại so với chữ :: CSV_XS vào khoảng 35%. Không có nhiều khoản tiết kiệm ...
Có ai có đề xuất về cách tôi có thể đọc trong các dữ liệu này hiệu quả hơn không?
Cảm ơn sự giúp đỡ của bạn.
Yours và friedo's có được những ngón tay cái từ tôi. – Axeman
@Axeman Cảm ơn bạn. –
Đó là cách để đi nếu bạn không cần quyền truy cập ghi. –