2010-02-21 57 views
7

Tôi phát triển một số dự án PHP trên nền tảng Linux. Có bất kỳ nhược điểm nào khi đặt hàng nghìn ảnh (tệp) trong một thư mục không? Đây là bộ đóng mà sẽ không phát triển. Cách khác là tách các tệp này bằng cách sử dụng cấu trúc thư mục dựa trên một số ID (theo cách này, chúng ta sẽ chỉ nói 100 trong một thư mục).Nhiều tệp trong một thư mục?

Tôi đặt câu hỏi này, vì thường tôi thấy sự phân tách như vậy khi tôi xem URL hình ảnh trên các trang web khác nhau. Bạn có thể thấy rằng việc phân tách thư mục được thực hiện theo cách như vậy, mà không có nhiều hơn sau đó hàng trăm hình ảnh trong một thư mục.

Tôi sẽ đạt được điều gì bằng cách không đặt hàng nghìn tệp (không tăng tập) trong một thư mục nhưng tách chúng thành các nhóm, ví dụ: 100? Nó có đáng làm việc phức tạp không?

UPDATE:

  • Sẽ không có bất cứ lặp đi lặp lại theo chương trình qua các tập tin trong một thư mục (chỉ cần truy cập trực tiếp đến một hình ảnh bằng cách đó là tên tập tin)
  • Tôi muốn nhấn mạnh rằng các thiết lập hình ảnh đã đóng. Đó là ít hơn 5000 hình ảnh, và đó là nó.
  • Không có loại logic của hình ảnh này
  • truy cập Nhân/browse không cần
  • hình ảnh có tên tập tin độc đáo
  • Hệ điều hành: Debian/Linux 2.6.26-2-686, Filesystem: ext3

thông tin giá trị TỪ TRẢ LỜI:

Tại sao riêng biệt nhiều file vào thư mục khác nhau:

  • "file 32k giới hạn cho mỗi thư mục khi sử dụng ext3 trên nfs"
  • lý do hiệu suất (tốc độ truy cập) [nhưng đối với vài ngàn file rất khó để nói nếu nó có giá trị, mà không đo]

Trả lời

2

thường là lý do cho việc phân tách như vậy là hiệu suất hệ thống tệp. cho một tập hợp 5000 tập tin đã đóng Tôi không chắc nó có đáng giá không. Tôi khuyên bạn nên thử phương pháp đơn giản để đặt tất cả các tệp trong một thư mục, nhưng hãy để mắt đến thời gian thực để truy cập tệp.

nếu bạn thấy rằng nó không đủ nhanh cho nhu cầu của bạn, bạn có thể chia nhỏ nó như bạn đã đề xuất.

Tôi phải tự chia nhỏ các tệp vì lý do hiệu suất. ngoài ra tôi đã gặp phải giới hạn 32k tệp cho mỗi thư mục khi sử dụng ext3 trên nfs (không chắc chắn nếu đó là giới hạn của nfs hoặc ext3). vì vậy đó là một lý do khác để chia thành nhiều thư mục. trong mọi trường hợp, hãy thử với một thư mục duy nhất và chỉ chia nhỏ nếu bạn thấy nó không đủ nhanh.

+1

'(không chắc chắn nếu đó là giới hạn của nfs hoặc ext3)' Đó là giới hạn ext3. – thomasrutter

0

Lý do duy nhất tôi có thể tưởng tượng nó sẽ là bất lợi khi lặp qua thư mục. Các tệp khác, có nghĩa là nhiều lần lặp lại hơn. Nhưng đó là cơ bản tất cả những gì tôi có thể nghĩ đến từ góc độ lập trình.

1

Tôi nghĩ có hai khía cạnh cho câu hỏi này:

  1. Liệu các hệ thống tập tin Linux mà bạn đang sử dụng một cách hiệu quả hỗ trợ thư mục với hàng ngàn tập tin. Tôi không phải là chuyên gia, nhưng tôi nghĩ rằng các hệ thống tệp mới hơn sẽ không gặp sự cố.

  2. Có vấn đề về hiệu suất với các hàm PHP cụ thể không? Tôi nghĩ rằng truy cập trực tiếp vào các tập tin sẽ được okay, nhưng nếu bạn đang làm danh sách thư mục sau đó bạn cuối cùng có thể chạy vào thời gian hoặc các vấn đề bộ nhớ.

7

Ngoài truy cập tệp nhanh hơn bằng cách tách hình ảnh thành thư mục con, bạn cũng mở rộng đáng kể số tệp bạn có thể theo dõi trước khi đạt đến giới hạn tự nhiên của hệ thống tệp.

Cách tiếp cận đơn giản là md5() tên tệp, sau đó sử dụng các ký tự đầu tiên n làm tên thư mục (ví dụ: substr(md5($filename), 2)). Điều này đảm bảo phân phối hợp lý ngay cả (so với việc lấy n ký tự đầu tiên của tên tệp thẳng).

+0

Nhiều cấp sẽ hữu ích vào các cấp thư mục con khác. Ví dụ: ./12/34/56/78/1234567890abc.jpg. –

+0

Ok, vì vậy md5 sẽ là một cách tiếp cận chung. Trong trường hợp của tôi, tôi đã có ID duy nhất, bởi vì mỗi hình ảnh được liên kết với chính xác một hàng cơ sở dữ liệu (tất nhiên là có hàng chính của khóa học). Tôi nghĩ đó là một kịch bản điển hình. – JohnM2

+1

Điều đáng xem là những con số này có thể không được phân phối đồng đều dưới dạng băm md5. –

0

Hàng nghìn hình ảnh vẫn ổn. Khi bạn truy cập vào một thư mục, hệ điều hành sẽ đọc danh sách các tệp của nó theo các khối 4K. Nếu bạn có cấu trúc thư mục đơn giản, có thể mất thời gian để đọc toàn bộ danh sách tệp nếu có nhiều tệp (e. G. Hundred nghìn) trong đó.

1

Không có lý do gì để tách các tệp đó thành nhiều thư mục, nếu bạn không mong đợi bất kỳ xung đột tên tệp nào và nếu bạn không cần phải lặp qua các hình ảnh đó tại bất kỳ thời điểm nào.

Nhưng vẫn còn, nếu bạn có thể nghĩ về một phân loại khêu gợi, không phải là một ý tưởng tồi để sắp xếp các hình ảnh một chút, ngay cả khi nó chỉ là vì lý do bảo trì.

0

Nếu thay đổi hệ thống tệp là một tùy chọn, tôi khuyên bạn nên di chuyển bất cứ nơi nào bạn lưu trữ tất cả hình ảnh vào hệ thống tệp ReiserFS. Nó là tuyệt vời tại lưu trữ nhanh/truy cập của rất nhiều các tập tin nhỏ.

Nếu không, phản hồi của MightyE về việc chia nhỏ chúng thành các thư mục là hợp lý nhất và sẽ tăng thời gian truy cập bằng một biên độ đáng kể.

Các vấn đề liên quan