Có bao nhiêu tập tin trong một thư mục là quá nhiều? (Tải xuống dữ liệu từ mạng)


19

Lời chào hỏi,

Tôi đang viết một số kịch bản để xử lý hình ảnh từ các trang web ảnh khác nhau. Ngay bây giờ tôi đang lưu trữ tất cả dữ liệu này trong các tệp văn bản riêng lẻ trong cùng một thư mục.

Thư mục có thể truy cập web. Người dùng cuối thực hiện cuộc gọi đến dịch vụ web trả về đường dẫn đến tệp mà người dùng sẽ cần.

Tôi đã tự hỏi ở giai đoạn nào tôi sẽ thấy một tác động hiệu suất bằng cách có tất cả các tệp này trong cùng một thư mục? (Nếu có)



Câu trả lời:


12

Hiệu suất thay đổi tùy theo hệ thống tập tin bạn đang sử dụng.

  • FAT: quên nó đi :) (ok, tôi nghĩ giới hạn là 512 tệp cho mỗi thư mục)
  • NTFS: Mặc dù nó có thể chứa 4 tỷ tệp trên mỗi thư mục, nhưng nó xuống cấp tương đối nhanh - khoảng một nghìn bạn sẽ bắt đầu nhận thấy các vấn đề về hiệu suất, vài nghìn và bạn sẽ thấy trình thám hiểm xuất hiện khá lâu.
  • EXT3: giới hạn vật lý là 32.000 tệp, nhưng perf cũng bị sau vài nghìn tệp.

  • EXT4: về mặt lý thuyết là vô hạn

  • ReiserFS, XFS, JFS, BTRFS: đây là những tệp tốt cho nhiều tệp trong một thư mục vì chúng hiện đại hơn và được thiết kế để xử lý nhiều tệp (các tệp khác được thiết kế lại vào thời mà ổ cứng được đo bằng MB không phải GB) . Hiệu suất tốt hơn rất nhiều đối với nhiều tệp (cùng với ext4) vì cả hai đều sử dụng thuật toán loại tìm kiếm nhị phân để lấy tệp bạn muốn (các tệp khác sử dụng một tệp tuyến tính hơn).


6
Cái này sai. Không có giới hạn 32000 tệp trong EXT3. Có giới hạn 32000 thư mục con. Tôi đã có một thư mục ở đây với hơn 300000 tệp và nó hoạt động tốt.
davidsheldon

1
hoàn toàn đúng - giới hạn tệp là giới hạn toàn bộ hệ thống tệp trên các nút, nhưng bạn bị giới hạn ở 32k liên kết (tức là các thư mục con).
gbjbaanb

Tuyên bố về NTFS hiện tại cũng không đúng, nó có thể chứa tới 4.294.967.295 (2 ^ 32 - 1): technet.microsoft.com/en-us/l
Library / cc781134% 28WS.10% 29.aspx

KHÔNG nhầm lẫn các thư mục con với các tệp, trên máy CentOS tôi có 32000 thư mục con, đạt đến giới hạn, tôi đã di chuyển tất cả PHIM trong một thư mục đó và vẫn hoạt động tốt.
adrianTNT


8

Tôi lưu trữ hình ảnh để phục vụ bởi một máy chủ web và tôi có hơn 300.000 hình ảnh trong một thư mục trên EXT3. Tôi thấy không có vấn đề hiệu suất. Trước khi thiết lập điều này, tôi đã thử nghiệm với 500k hình ảnh trong một thư mục và truy cập ngẫu nhiên các tệp theo tên và không có sự chậm lại đáng kể nào với 500k trên 10k hình ảnh trong thư mục.

Nhược điểm duy nhất tôi thấy là để đồng bộ hóa cái mới với máy chủ thứ hai, tôi phải chạy rsynctrên toàn bộ thư mục và không thể chỉ bảo nó đồng bộ hóa một thư mục con chứa hàng nghìn gần đây nhất.


Vâng, để đồng bộ với máy chủ thứ hai tôi nghĩ bạn phải tạo một cấu trúc và thuật toán để giữ các thay đổi, thì nhật ký này có thể giúp bạn tiết kiệm rất nhiều thời gian.
Bahadir Tasdemir

+1 Điều này thực sự trả lời câu hỏi.
kubanchot

Một nhược điểm, nếu bạn sử dụng máy khách FTP như FileZilla và muốn liệt kê nội dung của thư mục, sẽ mất một lúc.
Kai Noack

3

Số lượng tệp trong một thư mục về mặt lý thuyết có thể là vô hạn. Tuy nhiên, mỗi khi HĐH sẽ truy cập vào thư mục cụ thể để tìm kiếm tệp, nó sẽ phải xử lý tất cả các tệp trong thư mục. Với ít hơn 500 tệp, bạn có thể không nhận thấy bất kỳ sự chậm trễ nào. Nhưng khi bạn có hàng chục ngàn tệp trong một thư mục, một lệnh danh sách thư mục đơn giản (ls hoặc dir) có thể mất quá nhiều thời gian. Khi các thư mục này có thể được truy cập qua FTP, nó sẽ thực sự quá chậm ...

Các vấn đề về hiệu năng sẽ không thực sự phụ thuộc vào HĐH của bạn mà phụ thuộc vào tốc độ bộ xử lý hệ thống, dung lượng ổ đĩa và bộ nhớ. Nếu bạn có nhiều tệp đó, bạn có thể muốn kết hợp chúng vào một kho lưu trữ duy nhất và sử dụng một hệ thống lưu trữ được tối ưu hóa để chứa nhiều dữ liệu. Đây có thể là một tệp ZIP nhưng tốt hơn nữa, lưu trữ chúng dưới dạng các đốm màu trong cơ sở dữ liệu với tên tệp là khóa chính.


Nhưng việc truy cập tệp trực tiếp sẽ loại bỏ các nút cổ chai với các thư mục tìm kiếm hoặc sẽ truy cập vào một lệnh trực tiếp vẫn có một cuộc gọi tìm kiếm cơ bản? (Linux, debian)
steve

3
Truy cập tệp trực tiếp sẽ giảm thiểu những vấn đề này. Tôi đã thực hiện các thử nghiệm trên ext3 và truy cập một tệp theo tên trong thư mục chứa 500000 tệp không chậm hơn đáng kể so với tệp chứa 1000. Rõ ràng việc thực hiện lslà một vấn đề.
davidsheldon

Khi biết tên chính xác, truy cập phải nhanh. Vấn đề sẽ chủ yếu là bất kỳ mã hoặc lệnh nào muốn có được danh sách các tệp.
Wim ten Brink

1

Nguyên tắc nhỏ của tôi là phân chia các thư mục nếu có hơn 1000 tệp và thư mục sẽ được duyệt (tức là thông qua internet hoặc Explorer) hoặc 5000 tệp khác.


0

Như @skaffman chỉ ra, các giới hạn phụ thuộc vào hệ điều hành. Bạn có thể bị ảnh hưởng bởi các giới hạn trên các hệ điều hành cũ. Tôi nhớ một phiên bản cũ của Solaris bị giới hạn ở 32768 tệp trên mỗi thư mục.

Giải pháp thông thường là sử dụng một số loại băm, tức là máy chủ Cyrus imap chia tách người dùng bằng một hàm băm chữ cái:

/var/spool/imap/a/user/anna/
/var/spool/imap/a/user/albert/
/var/spool/imap/d/user/dan/
/var/spool/imap/e/user/ewan/

1
Cảm ơn, tôi chắc chắn sẽ có một cái gì đó tại chỗ khi một thư mục có hơn 2k tệp! :)
steve

Câu hỏi này có một số câu trả lời hay: serverfault.com/questions/95444/ từ
davey

Nguyên tắc chung của tôi là hơn 20.000 tệp trong một thư mục không phải là một ý tưởng hay. Hầu hết các hệ thống tập tin hiện đại đều làm tốt với nhiều tập tin đó. Khi bạn nhấn 32k tệp trong một thư mục, một số hệ thống tệp như ext3 sẽ bắt đầu gặp sự cố nghiêm trọng về hiệu năng.
Phil Hollenback

Phil - bạn có bất kỳ thông tin nào về các vấn đề về hiệu suất với hơn 32 nghìn tệp với ext3 không, tôi không thấy bất kỳ thông tin nào vào lúc này với hơn 300k Có lẽ đó là thứ không ảnh hưởng đến mô hình sử dụng của tôi.
davidsheldon

Ở công việc trước đây, phần mềm khoa học của tôi sẽ tạo ra rất nhiều tệp nhỏ (vài k mỗi) trong một thư mục. Chúng tôi chắc chắn đã thấy rằng trong khoảng thời gian đọc thư mục tập tin> 32k sẽ tăng vọt. Chỉ cần chạy 'ls' trên một thư mục có nhiều tệp sẽ mất một phút hoặc hơn.
Phil Hollenback

0

Nếu bạn đang truy cập trực tiếp vào một tệp, số lượng tệp trong một thư mục không có vấn đề về tốc độ.

Số lượng tệp bạn có thể tạo trong một thư mục phụ thuộc vào hệ thống tệp bạn đang sử dụng. Nếu bạn đang liệt kê tất cả các tệp trong thư mục hoặc tìm kiếm, sắp xếp, v.v. có nhiều tệp sẽ làm chậm các hoạt động đó.

gbjbaanb đã sai trong câu trả lời của ông về kích thước tệp tối đa của ext3. Nói chung, ext giới hạn số lượng tệp trên đĩa của bạn nói chung. Bạn không thể tạo thêm tệp sau đó bạn có inodes trong bảng inode của mình. Anh ấy đúng khi đề xuất reiserfs cho hiệu suất cao hơn với nhiều tệp


0

Đã kiểm tra thư mục với các tệp 10K ở dạng NTFS (Windows 7, 64 bit). Thư mục với hình ảnh 10K trong bất kỳ chế độ xem nào (Danh sách, Biểu tượng, v.v.) hoạt động và cuộn mà không có bất kỳ độ trễ hợp lý nào.

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.