Hệ thống tập tin 'đảo ngược'?


1

Tiếp theo một câu hỏi tôi đã hỏi trên StackOverflow , có bất kỳ hệ thống tệp nào tồn tại trong đó dữ liệu được viết "từ đầu đến trước" hoặc "từ dưới lên trên", thay vì từ trên xuống dưới không?

Cụ thể, tôi đang tìm kiếm (có lẽ là một mục đích được xây dựng) một cách lưu trữ các tệp nhật ký ở dạng đầu tiên gần đây nhất ( a la cách các blog và trang web tin tức được tổ chức, với gần đây nhất ở trên cùng).

Liệu một con thú như vậy tồn tại? Nếu vậy, nó là gì, và nó được tìm thấy ở đâu?


Đến cuối cùng bạn sẽ làm điều này?
BloodPhilia

Bạn có thực sự muốn toàn bộ hệ thống tập tin giống như vậy không, chỉ cần thêm vào mục mới nhất trên đầu tệp? Là toàn bộ hệ thống tập tin chỉ dành cho các tập tin nhật ký?
Arjan

Kết quả đau đớn khi hệ thống tập tin như vậy sẽ tồn tại:out.write("!egassem gol desrever yM")
Arjan

Theo câu trả lời được chấp nhận cho câu hỏi StackOverflow, tôi đã đề xuất sử dụng tac stackoverflow.com/questions/3970241/ Lần
từ đó vào

@Arjan - không, các dòng riêng lẻ sẽ ở bên trái (vì tôi đang nghĩ bằng tiếng Anh), nhưng trong cử chỉ , các dòng sẽ được viết "từ dưới lên"
warren

Câu trả lời:


3

Những gì bạn đang yêu cầu không chỉ là một hệ thống tập tin đảo ngược của Wikipedia. Bạn muốn một hệ thống tập tin có cấu trúc bản ghi , được đảo ngược, tức là một hệ thống tệp bản ghi trong đó bản ghi được thêm lần cuối xuất hiện đầu tiên trong tệp. Trong thực tế, khía cạnh đảo ngược có thể sẽ được thực hiện khi bạn có thể chèn một bản ghi trước bản ghi đầu tiên hiện có.

Các giao diện hệ thống tập tin được tìm thấy trong hệ điều hành thường được tìm thấy trên PC (Unix, Windows và thậm chí cả những thứ kỳ lạ hơn) chỉ có cấu trúc byte - chúng không có khái niệm về bản ghi. Vì vậy, bạn đã hết may mắn.

Một cách tiếp cận có thể là làm cho mỗi mục nhật ký thành một tệp riêng trong thư mục. Sau đó duyệt qua thư mục theo thứ tự ngược của thời gian tạo tệp hoặc theo thứ tự ngược của tên nếu bạn đặt tên tăng đơn điệu cho các mục nhật ký. Vì bạn có thể có một số lượng lớn các mục nhật ký, nên đảm bảo sử dụng một hệ thống tệp hỗ trợ tốt các thư mục lớn (ví dụ: trên Linux reiserfs và ext3 với dir_indextính năng là ok nhưng ext2 thì không), hoặc người khác sử dụng các thư mục con (một cho 1000 mục đầu tiên, một cho 1000 mục tiếp theo, v.v.).

Một cách tiếp cận khác là sử dụng một cơ sở dữ liệu phức tạp hơn, ví dụ như một cơ sở dữ liệu mà bạn có thể truy vấn bằng SQL và chỉ cần chọn các bản ghi theo thứ tự ngược từ sáng tạo của chúng ( SELECT message FROM logs ORDER BY date DESC).


2

Tôi không hoàn toàn chắc chắn không tồn tại, nhưng tôi chắc chắn chưa bao giờ nghe nói về một cái. Nếu chúng có thể được thực hiện, tôi nên nghĩ rằng sẽ có một số nhược điểm lớn.

Chuẩn bị cho một tệp thường yêu cầu một bản sao đầy đủ của dữ liệu hiện có. Trong một hệ thống tệp, bạn có thể xử lý nó để thêm một khối vào đầu tệp, nhưng nó vẫn gây ra một vài vấn đề nhỏ. Các khối có không gian trống sẽ phải giữ không gian trống ngay từ đầu, do đó rất có thể sẽ cần thêm tìm kiếm bằng ổ đĩa để tìm vị trí thích hợp.

Xử lý không gian trống trên ổ đĩa, khi làm việc lạc hậu, sẽ trở thành một nỗi đau lớn. Nó sẽ mâu thuẫn với hầu hết các kỹ thuật lập trình, vì bạn sẽ phải tìm chỉ số tối đa và sau đó làm việc trở lại từ đó.

Tôi có thể tưởng tượng nó sẽ làm chậm các tệp lớn, và chắc chắn sẽ là một điều vô lý để lập trình.

Thay vì tìm một hệ thống tập tin ngược, tại sao bạn không thể đơn giản viết tập tin như bình thường và phân tích ngược lại? Lập sơ đồ định dạng tin nhắn cơ bản, đọc tệp và phân tích các tin nhắn từ nó, sau đó hiển thị chúng từ đầu đến cuối. Nếu bạn chỉ cần những tin nhắn cuối cùng, hãy tìm đến cuối tập tin, sau đó quay lại n tin nhắn. Nó sẽ có một kết quả tương tự, nhưng với công việc ít hơn nhiều và hiệu suất tương đương hoặc tốt hơn.


1

Bạn cần tách biệt các ý tưởng lưu trữtruy xuất . Ngay cả trong các blog bạn đề cập, các mục có khả năng được lưu theo thứ tự thời gian chuyển tiếp, nhưng được hiển thị theo thứ tự thời gian đảo ngược (bỏ qua thực tế là nó dễ dàng hơn bằng cách sử dụng lưu trữ có cấu trúc).

Người ta có thể hình dung ra một hệ thống lưu trữ có cấu trúc đơn giản, có thể lưu các mục theo thứ tự chuyển tiếp quen thuộc với "bản ghi" có dạng tự do và độ dài thay đổi với các con trỏ bù byte được lưu trữ trong tệp tài nguyên ở định dạng có độ dài cố định (64 bit sẽ tập tin hỗ trợ hơn 18 triệu terabyte). Tìm kiếm bản ghi cuối cùng hoặc nthbản ghi hoặc last - nbản ghi trong tệp con trỏ, sau đó byte mà nó trỏ đến trong tệp chính sẽ không đáng kể và nhanh chóng. Thủ thuật mà một hệ thống tập tin hoặc trình điều khiển đặc biệt sẽ cho phép là làm cho nguyên tử này và làm cho tệp tài nguyên trở nên trong suốt.


0

Bạn đang tìm kiếm endianness là thứ tự byte? Tại sao bạn muốn các tệp nhật ký được tổ chức ở cấp hệ thống tệp thay vì chỉ yêu cầu thông qua cho phép ls?

Nếu đó là về Endianness, có một số hệ thống tập tin có sẵn.


0

Hai ý nghĩ nảy ra trong đầu:

Một số hệ thống kiểm soát phiên bản lưu trữ phiên bản đầu tiên của tệp được kiểm soát đầy đủ và tất cả các phiên bản tiếp theo dưới dạng thay đổi, trong đó các hệ thống khác lưu trữ phiên bản hiện tại của tệp được kiểm soát đầy đủ và tất cả các phiên bản trước là thay đổi.

Nếu bạn ghi lại các sự kiện thời gian chạy trong cơ sở dữ liệu chứ không phải là một tệp phẳng, nó có thể mờ đối với bạn cho dù cơ sở dữ liệu đang lưu trữ các sự kiện theo tuần tự, tuần tự ngược hay hỗn loạn.


0

Thật không may, không có cách dễ dàng để làm những gì bạn muốn. Nó sẽ yêu cầu viết lại toàn bộ tập tin mỗi lần thêm mục nhập. Nó sẽ bị CHẬM và trở nên chậm hơn khi tệp phát triển. Tôi nghĩ rằng điều tốt nhất bạn có thể làm là một bản ghi khóa theo trình tự được đảo ngược trên màn hình, nhưng được giữ theo thứ tự "bình thường" trên đĩa. Bất kỳ db SQL nào cũng có thể thực hiện việc này một cách dễ dàng nhưng nó có thể tốn nhiều chi phí hơn bạn muốn.

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.