Chúng tôi muốn lưu trữ hàng triệu tệp văn bản trong hệ thống tệp Linux, với mục đích có thể nén và phục vụ một bộ sưu tập tùy ý như một dịch vụ. Chúng tôi đã thử các giải pháp khác, như cơ sở dữ liệu khóa / giá trị, nhưng các yêu cầu của chúng tôi về tính đồng thời và song song làm cho việc sử dụng hệ thống tệp gốc là lựa chọn tốt nhất.
Cách đơn giản nhất là lưu trữ tất cả các tệp trong một thư mục:
$ ls text_files/
1.txt
2.txt
3.txt
có thể có trên hệ thống tệp EXT4 , không giới hạn số lượng tệp trong một thư mục.
Hai quy trình FS sẽ là:
- Viết tệp văn bản từ web scrape (không nên bị ảnh hưởng bởi số lượng tệp trong thư mục).
- Zip tập tin được chọn, được đưa ra bởi danh sách tên tập tin.
Câu hỏi của tôi là, việc lưu trữ tới mười triệu tệp trong một thư mục có ảnh hưởng đến hiệu suất của các hoạt động trên hoặc hiệu năng hệ thống chung, khác với việc tạo một cây thư mục con cho các tệp để sống không?
ls -l
, hoặc bất cứ thứ gì khác stat
được inode trong thư mục (ví dụ: bash
hoàn thành toàn cầu / tab) sẽ nhanh hơn một cách giả tạo hơn sau khi hao mòn (xóa một số tệp, viết một số tệp mới). ext4 có thể làm tốt hơn với điều này so với XFS, bởi vì XFS tự động phân bổ không gian cho các nút so với dữ liệu, vì vậy bạn có thể kết thúc với các nút bị phân tán nhiều hơn, tôi nghĩ vậy. (Nhưng đó là một phỏng đoán thuần túy dựa trên rất ít kiến thức chi tiết; Tôi hầu như không sử dụng ext4). Đi với abc/def/
subirs.
ZipOutputStream
sẽ đánh bại chỉ là về bất kỳ miễn phí Linux hệ thống tập tin bản địa - tôi nghi ngờ bạn muốn trả tiền cho GPFS của IBM. Vòng lặp để xử lý tập kết quả JDBC và tạo luồng zip đó có lẽ chỉ là 6-8 dòng mã Java.
dir_index
, thường được bật theo mặc định, sẽ tăng tốc độ tra cứu nhưng có thể giới hạn số lượng tệp trên mỗi thư mục.