Số lượng tệp trên mỗi thư mục


19

Tôi có một thư mục với khoảng 100000 tệp nhỏ (mỗi tệp từ 1-3 dòng, mỗi tệp là một tệp văn bản). Về kích thước, thư mục không quá lớn (<2GB). Dữ liệu này nằm trong một máy chủ NFS được quản lý chuyên nghiệp. Máy chủ chạy Linux. Tôi nghĩ hệ thống tập tin là ext3, nhưng tôi không biết chắc chắn. Ngoài ra, tôi không có quyền truy cập root vào máy chủ.

Những tệp này là đầu ra của một thí nghiệm khoa học quy mô lớn mà tôi không có quyền kiểm soát. Tuy nhiên, tôi phải phân tích kết quả.

Bất kỳ thao tác / xử lý I / O nào trong thư mục này đều rất, rất chậm. Mở một tệp (fopen in python), đọc từ một tệp đang mở, đóng tệp, tất cả đều rất chậm. Trong bash ls, du, vv không hoạt động.

Câu hỏi là:

Số lượng tệp tối đa trong một thư mục trong Linux là bao nhiêu để xử lý, xử lý, đọc, v.v. Tôi hiểu rằng câu trả lời phụ thuộc vào nhiều thứ: loại fs, phiên bản kernel, phiên bản máy chủ, phần cứng, v.v. Tôi chỉ muốn một quy tắc ngón tay cái, nếu có thể.


6
Câu hỏi trực tiếp của bạn đã được Giles trả lời tốt, nhưng tất cả, các hệ thống tệp Linux tạo ra sự thay thế kém cho cơ sở dữ liệu khi bạn đang sử dụng tên tệp làm khóa cho các bit dữ liệu nhỏ. Bạn không kiểm soát việc tạo, nhưng bạn có thể xử lý hậu kỳ dữ liệu thành một dạng dễ phân tích hơn; nếu bạn không, bạn sẽ trả chi phí cho hệ thống tệp ở mọi bước. Bạn có thể giảm chi phí nhưng bạn có thể hạnh phúc nhất nếu bạn loại bỏ nó.
msw

Câu trả lời:


22

Khi bạn phỏng đoán, nó phụ thuộc vào nhiều thứ, chủ yếu là các tùy chọn và loại hệ thống tập tin và ở một mức độ nào đó là phiên bản kernel. Trong loạt ext2 / ext3 / ext4, có một cải tiến lớn khi dir_indextùy chọn xuất hiện (một thời gian sau khi phát hành ban đầu của ext3): nó làm cho các thư mục được lưu trữ dưới dạng cây tìm kiếm (truy cập thời gian logarit) thay vì danh sách tuyến tính (truy cập thời gian tuyến tính ). Đây không phải là thứ bạn có thể thấy qua NFS, nhưng nếu bạn có một số liên hệ với quản trị viên, bạn có thể yêu cầu họ chạy tune2fs -l /dev/something |grep features(thậm chí có thể thuyết phục họ nâng cấp?). Chỉ có số lượng các vấn đề, không phải kích thước của chúng.

Ngay cả với dir_index, 100000 cảm thấy lớn. Lý tưởng nhất là lấy các tác giả của chương trình tạo các tệp để thêm một mức các thư mục con. Để không làm giảm hiệu suất, tôi sẽ đề xuất giới hạn khoảng 1000 tệp cho mỗi thư mục cho ext2 hoặc ext3 mà không có dir_index20000 với dir_indexhoặc reiserfs. Nếu bạn không thể kiểm soát cách các tệp được tạo, hãy di chuyển chúng vào các thư mục riêng trước khi làm bất cứ điều gì khác.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.