Tôi đã viết một tỷ lệ thay thế nhanh hơn , "hoạt động cho tôi", bởi vì vấn đề này liên tục làm tôi khó chịu.
Bạn có thể sử dụng nó như thế này:
pip3 install --user ratarmount
ratarmount my-huge-tar.tar mount-folder
ls -la mount-folder # will show the contents of the tar top-level
Khi bạn hoàn thành, bạn có thể ngắt kết nối nó như bất kỳ ngàm FUSE nào:
fusermount -u mount-folder
Tại sao nó nhanh hơn archivemount?
Nó phụ thuộc vào những gì bạn đo lường.
Dưới đây là điểm chuẩn của dấu chân bộ nhớ và thời gian cần thiết cho lần gắn đầu tiên, cũng như thời gian truy cập cho một cat <file-in-tar>
lệnh đơn giản và một find
lệnh đơn giản .
Các thư mục chứa mỗi tệp 1k đã được tạo và số lượng thư mục rất đa dạng.
Biểu đồ bên trái phía dưới hiển thị các thanh lỗi cho biết thời gian đo tối thiểu và tối đa cat <file>
cho 10 tệp được chọn ngẫu nhiên.
Thời gian tìm kiếm tập tin
Sự so sánh sát thủ là thời gian cần thiết cat <file>
để kết thúc. Vì một số lý do, điều này chia tỷ lệ tuyến tính với kích thước tệp TAR (xấp xỉ byte trên mỗi tệp x số tệp) cho lưu trữ trong khi có thời gian không đổi theo tỷ lệ. Điều này làm cho nó trông giống như archivemount thậm chí không hỗ trợ tìm kiếm.
Đối với các tệp TAR nén, điều này đặc biệt đáng chú ý.
cat <file>
mất hơn hai lần miễn là gắn toàn bộ tệp .tar.bz2! Ví dụ: TAR với các tệp trống 10k (!) Phải mất 2.9 giây để gắn kết với lưu trữ nhưng tùy thuộc vào tệp được truy cập, quyền truy cập cat
mất từ 3ms đến 5s. Thời gian cần thiết dường như phụ thuộc vào vị trí của tệp bên trong TAR. Các tệp ở cuối TAR mất nhiều thời gian hơn để tìm kiếm; chỉ ra rằng "tìm kiếm" được mô phỏng và tất cả nội dung trong TAR trước khi tệp đang được đọc.
Việc nhận nội dung tệp có thể mất hơn gấp đôi thời gian vì việc cài đặt toàn bộ TAR là bất ngờ. Ít nhất, nó sẽ hoàn thành trong cùng một khoảng thời gian như gắn kết. Một lời giải thích là tập tin đang được mô phỏng tìm kiếm nhiều lần, thậm chí có thể ba lần.
Ratarmount dường như luôn mất cùng một lượng thời gian để có được một tệp vì nó hỗ trợ tìm kiếm thực sự. Đối với các TAR được nén bzip2, nó thậm chí còn tìm đến khối bzip2, có địa chỉ cũng được lưu trong tệp chỉ mục. Về mặt lý thuyết, phần duy nhất nên chia tỷ lệ với số lượng tệp là tra cứu trong chỉ mục và nên chia tỷ lệ với O (log (n)) vì nó được sắp xếp theo đường dẫn và tên tệp.
Mức chiếm dụng bộ nhớ
Nói chung, nếu bạn có hơn 20k tệp trong TAR, thì dung lượng bộ nhớ của ratarmount sẽ nhỏ hơn vì chỉ mục được ghi vào đĩa khi nó được tạo và do đó có dung lượng bộ nhớ không đổi khoảng 30MB trên hệ thống của tôi.
Một ngoại lệ nhỏ là phụ trợ bộ giải mã gzip, vì một số lý do đòi hỏi nhiều bộ nhớ hơn khi gzip trở nên lớn hơn. Chi phí bộ nhớ này có thể là chỉ số cần thiết để tìm kiếm bên trong TAR nhưng cần điều tra thêm vì tôi không viết phần phụ trợ đó.
Ngược lại, archivemount giữ toàn bộ chỉ mục, ví dụ: 4GB cho các tệp 2M, hoàn toàn trong bộ nhớ miễn là TAR được gắn.
Thời gian gắn kết
Tính năng yêu thích của tôi là ratarmount có thể gắn TAR mà không bị chậm trễ đáng kể trong bất kỳ lần thử tiếp theo nào. Điều này là do chỉ mục, ánh xạ tên tệp thành siêu dữ liệu và vị trí bên trong TAR, được ghi vào tệp chỉ mục được tạo bên cạnh tệp TAR.
Thời gian cần thiết để gắn kết hành xử hơi kỳ lạ trong archivemount. Bắt đầu từ khoảng 20k tệp, nó bắt đầu chia tỷ lệ bậc hai thay vì tuyến tính đối với số lượng tệp. Điều này có nghĩa là bắt đầu từ khoảng 4 triệu tệp, tỷ lệ bắt đầu nhanh hơn nhiều so với lưu trữ mặc dù đối với các tệp TAR nhỏ hơn, nó chậm hơn tới 10 lần! Sau đó, một lần nữa, đối với các tệp nhỏ hơn, không cần quan tâm nhiều đến việc phải mất 1 giây hay 0,1 giây để gắn tar (lần đầu tiên).
Thời gian gắn cho các tệp nén bz2 là tương đương nhất mọi lúc. Điều này rất có thể bởi vì nó bị ràng buộc bởi tốc độ của bộ giải mã bz2. Ratarmount chậm hơn khoảng 2 lần ở đây. Tôi hy vọng sẽ làm cho người chiến thắng trở thành người chiến thắng rõ ràng bằng cách song song bộ giải mã bz2 trong tương lai gần, điều mà ngay cả đối với hệ thống 8 tuổi của tôi có thể mang lại tốc độ tăng gấp 4 lần.
Thời gian để có được siêu dữ liệu
Khi chỉ liệt kê tất cả các tệp có find
bên trong TAR (dường như cũng gọi stat cho mỗi tệp!?), Ratarmount chậm hơn 10 lần so với lưu trữ cho tất cả các trường hợp được thử nghiệm. Tôi hy vọng sẽ cải thiện điều này trong tương lai. Nhưng hiện tại, nó trông giống như một vấn đề thiết kế vì sử dụng Python và SQLite thay vì chương trình C thuần túy.