hệ thống tập tin cho hàng triệu tập tin nhỏ


44

Bạn sẽ chọn hệ thống tệp Linux nào để có tốc độ tốt nhất trong trường hợp sau:

  • một trăm triệu tập tin
  • Trung bình ~ 2k kích thước tệp
  • > 95% truy cập đọc
  • truy cập khá ngẫu nhiên
  • đồng thời cao (> 100 quy trình)

Lưu ý: Các tệp được lưu trữ trong một cây phân cấp sâu để tránh các thư mục lớn. Mỗi thư mục lá chứa khoảng một nghìn tệp.

Làm thế nào bạn sẽ điểm chuẩn nó?


3
Có một số thông tin bổ sung cần thiết. Chẳng hạn, bạn đang lưu trữ tất cả các tệp trong một thư mục phẳng hoặc trong các thư mục lồng nhau (được sắp xếp)? Điều này có thể có một tác động hiệu suất đáng kể về thời gian truy cập tập tin. Chọn lọc thông qua 100.000.000 mục trong một sắp xếp "phẳng" sẽ đòi hỏi chi phí đáng kể bất kể loại FS; trường hợp tốt nhất, bạn đang xem một loại tìm kiếm cây nào đó, vẫn cần nhiều lần tra cứu để đến tệp của bạn. Nếu bạn chuyển các tệp thành thư mục con, thời gian truy cập sẽ tăng tốc đáng kể vì có ít mục để tìm kiếm ở mỗi cấp.
Avery Payne

Các tập tin được truy cập ser seri hoặc đồng thời?
Steve Schnepp

Câu trả lời:


19

Đây là một số kết quả so sánh tất cả các máy tính linux chính với bonnie ++ mà bạn có thể sử dụng làm điểm bắt đầu.

Về mặt tìm kiếm ngẫu nhiên, Reiser thắng, tiếp theo là EXT4, tiếp theo là JFS. Tôi không chắc chắn nếu điều này sẽ tương quan chính xác với tra cứu thư mục, nhưng có vẻ như nó sẽ là một chỉ báo. Bạn sẽ phải làm các bài kiểm tra của riêng bạn cho điều đó cụ thể. EXT2 đánh bật tất cả mọi thứ trong thời gian tạo tập tin, có thể là do thiếu tạp chí, EXT4 vẫn đánh bại mọi thứ trừ Reiser mà bạn có thể không muốn sử dụng do tình trạng hiện tại của người thuê.

Bạn có thể muốn xem xét các ổ đĩa hỗ trợ NCQ và đảm bảo cài đặt của bạn được thiết lập để sử dụng nó. Theo tìm kiếm nặng nề nó sẽ cung cấp một sự gia tăng tốc độ.

Cuối cùng, hãy chắc chắn rằng máy của bạn có một tấn ram. Vì các tệp không được cập nhật thường xuyên, linux sẽ kết thúc bộ nhớ cache hầu hết trong số chúng để ram nếu nó có dung lượng trống. Nếu mô hình sử dụng của bạn là đúng, điều này sẽ giúp bạn tăng tốc độ lớn.


1
vấn đề của bonnie ++ là nó không thậm chí xấp xỉ kiểm tra kịch bản sử dụng của tôi
lợi ích

2
Bạn đã có một điểm về việc nó không kiểm tra tra cứu thư mục, nhưng thành thật mà nói, nếu đó là điểm nghẹt thở của bạn, tốt hơn hết là bạn nên bỏ dữ liệu của mình vào cơ sở dữ liệu thực. Các hệ thống tập tin không hoạt động gần như tốt trên các đối tượng nhỏ mà hầu hết các cơ sở dữ liệu được thiết kế để sử dụng
Andrew Cholakian

7
Liên kết @AndrewCholakian hiện đã chết.
Don Scott

8

Tôi đồng ý với hầu hết những gì Andrew nói, ngoại trừ việc tôi sẽ giới thiệu Reiser4 hoặc ReiserFS cũ hơn (nhưng được hỗ trợ tốt hơn) . Như các thử nghiệm đó (và tài liệu cho ReiserFS) chỉ ra, nó được thiết kế cho chính xác tình huống mà bạn đang hỏi về (số lượng lớn các tệp hoặc thư mục nhỏ). Tôi đã sử dụng ReiserFS trong quá khứ với Gentoo và Ubuntu mà không gặp vấn đề gì.

Đối với trạng thái của Hans Reiser, tôi không thấy đó là vấn đề với mã hoặc tính ổn định của chính Hệ thống tệp. Reiser4 thậm chí được tài trợ bởi cả DARPA và Linspire, vì vậy trong khi tôi đồng ý rằng sự phát triển hơn nữa của Hệ thống tệp Reiser là không xác định, tôi không nghĩ đó có phải là yếu tố quyết định liệu có ai nên sử dụng nó hay không.


3
Tôi đã sử dụng ReiserFS trong một thời gian dài. Trên thực tế, tôi vẫn đang sử dụng nó trên một máy chủ Gentoo cũ hơn mà tôi chưa có để cài đặt lại. Cài đặt này là 4 tuổi vào tháng 5 này. Những gì tôi có thể nói với bạn là nó đã chậm lại đáng kể. Hiện tượng đó đã xảy ra theo thời gian trên tất cả các hệ thống tệp sử dụng ReiserFS đang sử dụng đọc + ghi hoạt động trên tất cả các máy có hệ thống tệp đó, không có trường hợp ngoại lệ - vì vậy nếu bạn muốn sử dụng nó trong một khoảng thời gian dài thì nên giữ lại trong tâm trí. Tôi đã chuyển khỏi nó, sử dụng XFS cho các hệ thống tập tin lớn bây giờ.
Mihai Limbăşan

3

Tôi biết đây không phải là câu trả lời trực tiếp cho câu hỏi của bạn, nhưng trong những trường hợp này tôi nghĩ rằng một cơ sở dữ liệu có thể phù hợp hơn để lưu trữ điều này. Các tệp nhỏ có thể được lưu trữ ở định dạng nhị phân trong bảng cơ sở dữ liệu và được truy xuất tại wil. Phần mềm đang sử dụng các tệp này có thể hỗ trợ điều này mặc dù ...


1
Một hệ thống tập tin là gì, nếu không chỉ là một cơ sở dữ liệu phân cấp? Đề xuất của bạn thêm các lớp trừu tượng, phức tạp và phần mềm có thể không được bảo hành. Hơn nữa, chủ sở hữu câu hỏi đang hoàn thành nhiệm vụ của mình với 'Triết lý UNIX' mà tôi nghi ngờ bạn không thích trở thành một chàng trai Windows?
Stu Thompson

3
Trước hết, tôi không có gì chống lại Unix hoặc bất cứ điều gì khác trong khu vực đó. Có sự khác biệt lớn giữa các hệ thống tệp và cơ sở dữ liệu và đó là lý do tại sao cả hai công nghệ được phát triển. Cơ sở dữ liệu được thiết kế để làm việc với một lượng lớn các thực thể nhỏ, trong đó chúng thực hiện công việc tốt hơn hầu hết các hệ thống tệp. Tôi chỉ đơn thuần chỉ ra rằng có thể có một con đường khác bạn có thể đi với nó.
Jeroen Landheer

1
Và việc "dọn dẹp / hút bụi" một tệp db dễ dàng hơn nhiều so với việc chống phân mảnh một hệ thống tệp trên linux. Hầu hết / tất cả các fs không cung cấp chức năng đó, nói rằng nó không cần thiết. Ghi nhận xét của Mihai ở trên, bạn có thể thấy nó không hoàn toàn đúng.
Gringo Suave

3

Ai đó trên Unix StackExchange đã tạo một điểm chuẩn (có nguồn) để kiểm tra kịch bản này:

H: Hệ thống tệp Linux hiệu suất cao nhất để lưu trữ nhiều tệp nhỏ (HDD, không phải SSD) là gì?

Hiệu suất đọc tốt nhất dường như đến từ ReiserFS.


Btrfs dường như có kết quả tốt hơn hoặc có thể so sánh trong mọi thứ trừ xóa. Nhưng, bạn có thường xuyên xóa các tệp 300k không? Tôi thích rfs trong quá khứ, nhưng btrfs có thể là một đặt cược tốt hơn cho tương lai.
Gringo Suave

3

Theo kinh nghiệm của tôi, ext2 thổi ext4 ra khỏi nước cho các tệp nhỏ. Nếu bạn không quan tâm đến tính toàn vẹn của việc viết, thì thật tuyệt. Ví dụ, lật đổ tạo ra rất nhiều và rất nhiều tệp nhỏ, mà ext4 và các hệ thống tệp khác (XFS) bị nghẹt (chạy một công việc định kỳ giúp dữ liệu chuyển sang ext4 từ ext2 cứ sau nửa giờ hoặc gần như giải quyết được vấn đề.)

Chạy các lệnh này làm cho ext2 thậm chí nhanh hơn (mặc dù hầu hết các tùy chọn này làm cho hệ thống tệp không ổn định sau khi gặp sự cố trừ khi bạn chạy đồng bộ hóa trước khi gặp sự cố). Các lệnh này hầu như không có tác dụng với ext4 với các tệp nhỏ.

echo 15 > /proc/sys/vm/swappiness
echo 10 > /proc/sys/vm/vfs_cache_pressure
echo 99 > /proc/sys/vm/dirty_ratio
echo 50 > /proc/sys/vm/dirty_background_ratio
echo 360000 > /proc/sys/vm/dirty_expire_centisecs
echo 360000 > /proc/sys/vm/dirty_writeback_centisecs
echo "2000" > /proc/sys/vm/vfs_cache_pressure

1

Tôi đoán ext3 (hoặc ext4), có lẽ JFS sẽ là giải pháp tốt. Tôi sẽ cảnh giác với ext4 và btrfs (hệ thống tập tin rất khó - hãy chuẩn bị sẵn các bản sao lưu nếu bạn muốn sử dụng công cụ mới nhất, mới nhất).

Ngoài ra còn có các tham số khác nhau mà bạn có thể điều chỉnh trong thời gian mkfs để điều chỉnh hệ thống tập tin theo ý thích của bạn.

Tôi chắc chắn khuyên bạn nên chống lại XFS. Không phải vì nó là một hệ thống tập tin xấu, nhưng việc tạo / xóa là một hoạt động tốn kém trên nó.


Để tránh các vấn đề với tìm kiếm thư mục, ví dụ, sử dụng sơ đồ đặt tên thông minh:

<first letter of id>_<last letter of id>/<id>

hoặc tương tự, đề án phức tạp hơn. Điều này sẽ tăng tốc tìm kiếm thư mục của bạn và do đó tốc độ truy cập tổng thể. (Tôi nghĩ đó là một thủ thuật unix cũ, trở lại từ V7)


1
lợi thế của việc sử dụng chữ cái đầu tiên và cuối cùng và không chỉ n chữ cái đầu tiên là gì?
lợi ích

đó chỉ là một trong những phương án khả thi - liệu đó có phải là một lợi thế hay không phụ thuộc vào "khóa" được sử dụng để lập chỉ mục. Lược đồ cụ thể này tôi đã thấy được tham chiếu với ứng dụng lưu trữ dữ liệu về mọi người trong tổ chức và theo cách này họ đã lập chỉ mục tốt hơn. Như mọi khi, bạn cần điều chỉnh nó với dữ liệu của mình và sau đó lập hồ sơ cho đến khi bạn tìm thấy câu trả lời chính xác :)

1

Hầu hết các FS sẽ bị nghẹt thở với hơn 65 nghìn tệp trong một thư mục, tôi nghĩ điều đó vẫn đúng với ext4. Các hệ thống tệp Reiser không có giới hạn đó (mọi người tại mp3.com đã trả tiền để đảm bảo điều đó). Không chắc chắn về bất cứ điều gì khác, nhưng đó là một trong những tình huống sử dụng mà ReiserFS đã được thực hiện cho.


1
Đó là ReiserFS, không phải RieserFS
Daniel Rikowski

Cuối tuần này tôi đã có một thư mục trên ext4 với 1000000 tệp trong đó. Miễn là bạn không làm lshoặc hoàn thành tab, nó hoạt động nhanh. Có lẽ là do chỉ số.
Ole Tange

ext4 có phần mở rộng dir_index, giúp tăng tốc nhiều tệp trong một thư mục.
alfonx
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.