Kích thước khối nào cho hàng triệu tệp nhỏ


10

Tôi có 2x 4TB Đĩa trong phần cứng RAID1 (có thể là LSI MegaRaid) trên Debian Wheezy. Kích thước khối vật lý là 4kB. Tôi sẽ lưu trữ 150-200 triệu tệp nhỏ (từ 3 đến 10kB). Tôi không yêu cầu hiệu năng, nhưng để có hệ thống tập tin và kích thước khối tốt nhất để tiết kiệm dung lượng. Tôi đã sao chép một tệp 8200 byte vào một ext4 với kích thước khối là 4kB. Cái này mất 32kB đĩa!? Là tạp chí lý do cho điều đó? Vì vậy, có những tùy chọn nào để lưu hầu hết dung lượng cho các tệp nhỏ như vậy?


Câu trả lời:


1

Nếu tôi ở trong tình huống đó, tôi sẽ xem xét một cơ sở dữ liệu có thể lưu trữ tất cả dữ liệu trong một tệp với một chỉ mục dựa trên offset, nhỏ gọn, thay vì các tệp riêng biệt. Có thể một cơ sở dữ liệu có trình điều khiển FUSE có sẵn để tương tác với nó dưới dạng tệp khi cần thiết, mà thực tế không có tất cả các tệp riêng biệt.

Ngoài ra, bạn có thể nhìn vào phần trăm kích thước tệp thứ 60 - 70 và cố gắng điều chỉnh kích thước tệp trực tiếp vào các nút của cây hệ thống tệp, thay vì các khối riêng biệt trên đĩa. Lưu trữ 10k trong mỗi nút có lẽ là một câu hỏi lớn, nhưng nếu bạn có thể nhận được 60% -70% tệp trong đó, đó có thể là một chiến thắng rất lớn.

Chỉ có một số hệ thống tập tin nhất định có thể làm điều đó (reiserfs là một) và tôi đoán tất cả phụ thuộc vào kích thước của phần trăm đó, liệu nó có phù hợp với cây không. Bạn có thể điều chỉnh nó. Tôi đoán cố gắng để phù hợp với phần còn lại vào một khối.

Và đừng lo lắng về các tạp chí; dù sao họ cũng có giới hạn kích thước trên.


4
Không không không không không không không chỉ ... không cho đoạn 1 của bạn. Tôi đã phạm sai lầm này nhiều năm trước và nó phải được hoàn tác sau này. Tôi cũng đã thừa hưởng các hệ thống sử dụng mẫu thiết kế này. Các tệp thuộc hệ thống tệp hoặc dưới dạng thỏa hiệp, trong đối tượng SQL Server FileStream nếu bạn phải kết hợp chúng (vì vậy có thể trình điều khiển FUSE của bạn, nhưng vẫn không có). Có những cân nhắc khác khi làm việc trong hệ thống tệp, như không đặt 4 triệu tệp vào một thư mục (Tôi cũng đã mắc lỗi đó).
Mark Henderson

2
@MarkHenderson nhưng vấn đề là xác định những gì NÊN là một tập tin, và những gì nên là một bản ghi. Không có thêm thông tin chi tiết nào được cung cấp, hàng trăm triệu thứ nhỏ bé nghe có vẻ giống với hồ sơ hơn đối với tôi. Chỉ vì anh ta hiện có chúng dưới dạng tệp, điều đó không có nghĩa là họ cần phải giữ nguyên như vậy, hoặc đáng lẽ phải như vậy. Ngoài ra, tôi không bao giờ đề nghị thứ hai sử dụng SQL Server cho công việc;)

2
5 năm trước tôi đã thừa hưởng một hệ thống với 1 triệu tệp trong một thư mục và khoảng 10.000 tệp 1-4KB mới mỗi ngày. Tôi quyết định ném tất cả chúng vào một bảng ISAM vì "Này, chúng chỉ là văn bản đơn giản để phân tích!" và sau đó hóa ra là một sai lầm rất lớn bởi vì bây giờ tôi đã có một bảng 12 GB duy nhất với hàng triệu hàng mà hầu như không làm gì sau khi chúng được xử lý. Vì vậy, tôi đã chuyển trở lại để đưa chúng vào một hệ thống tập tin với các thư mục gia truyền dựa trên GUID của tên tệp.
Mark Henderson

(tại sao một bảng 12 GB duy nhất có các hàng bình phương là một vấn đề là một vấn đề khác mà tôi sẽ không tham gia ở đây)
Mark Henderson

2
@MarkHenderson: Đó không phải là một vấn đề khác, đó là lý do TẠI SAO bạn nói đó là giải pháp sai ("... sai lầm rất lớn bởi vì bây giờ tôi có một bảng 12 GB duy nhất với một hàng triệu ...."). Bạn chọn định dạng bảng / công cụ cơ sở dữ liệu sai, nhưng khái niệm đặt nhiều thứ nhỏ vào một tệp với INDEX là âm thanh, miễn là bạn làm đúng. Những gì bạn muốn là một cơ sở dữ liệu vượt trội tại kho lưu trữ khóa / giá trị cho hàng triệu đối tượng nhỏ, với tính năng tự động tắt. Cũng lưu ý rằng anh ấy đặc biệt thậm chí không quan tâm đến hiệu suất, chỉ là không gian.
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.