Sistem file 'terbalik'?


1

Dalam menindaklanjuti pertanyaan yang saya ajukan di StackOverflow , apakah ada sistem file di mana data dituliskan "ujung ke depan" atau "dari bawah ke atas", alih-alih dari atas ke bawah?

Secara khusus, saya sedang mencari (mungkin dibangun dengan tujuan) cara menyimpan file log dalam bentuk yang paling baru ( seperti bagaimana blog dan situs berita diatur, dengan yang terbaru di atas).

Apakah binatang seperti itu ada? Jika demikian, apa itu, dan di mana itu dapat ditemukan?


Untuk apa Anda akan melakukan ini?
BloodPhilia

Apakah Anda benar-benar ingin seluruh sistem file seperti itu, hanya untuk menambahkan entri terbaru di atas file? Apakah seluruh sistem file hanya untuk file log saja?
Arjan

Hasil yang menyakitkan ketika sistem file tersebut akan ada:out.write("!egassem gol desrever yM")
Arjan

Sesuai jawaban yang diterima pada pertanyaan StackOverflow, saya akan menyarankan menggunakan tac stackoverflow.com/questions/3970241/…
thereofromhere

@Arjan - tidak, baris individual akan kanan-kiri (karena saya sedang berpikir dalam bahasa Inggris), tetapi dalam gestalt , baris akan ditulis "bottom-up"
warren

Jawaban:


3

Apa yang Anda minta bukan hanya sistem file "terbalik". Anda ingin filesystem terstruktur , "terbalik", yaitu sistem file record di mana catatan yang ditambahkan terakhir muncul pertama kali dalam file. Bahkan aspek terbalik mungkin akan dilaksanakan sebagai "Anda dapat menyisipkan catatan sebelum catatan pertama yang ada".

Antarmuka Filesystem yang ditemukan dalam sistem operasi biasanya ditemukan pada PC (Unix, Windows, dan bahkan yang lebih eksotis) hanya terstruktur-byte - mereka tidak memiliki gagasan tentang catatan. Jadi, Anda kurang beruntung.

Salah satu pendekatan yang mungkin adalah membuat setiap entri log menjadi file terpisah di direktori. Kemudian lintasi direktori dalam urutan terbalik dari waktu pembuatan file, atau dalam urutan terbalik dari nama jika Anda memberikan nama yang meningkat secara monoton ke entri log. Karena Anda cenderung memiliki banyak entri log, pastikan untuk menggunakan sistem file yang mendukung direktori besar dengan baik (mis. Di Linux reiserfs dan ext3 dengan dir_indexfitur ok tapi ext2 tidak), atau gunakan subdirektori (satu untuk 1000 entri pertama, satu untuk 1000 entri berikutnya dan seterusnya).

Pendekatan lain adalah dengan menggunakan database yang lebih canggih, misalnya yang dapat Anda query dalam SQL, dan cukup pilih catatan dalam urutan terbalik dari pembuatannya ( SELECT message FROM logs ORDER BY date DESC).


2

Saya tidak sepenuhnya yakin tidak ada, tetapi saya pasti tidak pernah mendengarnya. Jika itu bisa dilakukan, saya harus berpikir akan ada beberapa kerugian besar.

Membebani file secara umum membutuhkan salinan lengkap dari data yang ada. Dalam sistem file, Anda mungkin bisa mengatasinya dengan menambahkan blok ke awal file, tetapi masih menyebabkan beberapa masalah kecil. Blok dengan ruang kosong harus menjaga ruang kosong di awal, sehingga sangat mungkin membutuhkan pencarian ekstra oleh drive untuk menemukan lokasi yang tepat.

Menangani ruang kosong pada drive, ketika bekerja mundur, akan menjadi rasa sakit yang besar. Itu akan bertentangan dengan sebagian besar teknik pemrograman, karena Anda harus menemukan indeks maks dan kemudian bekerja kembali dari sana.

Saya bisa membayangkan itu akan melambat pada file besar, dan pasti akan menjadi hal yang konyol untuk diprogram.

Alih-alih menemukan sistem file terbalik, mengapa Anda tidak bisa menulis file seperti biasa dan menguraikannya secara terbalik? Buat skema pemformatan pesan dasar, baca file dan parsing pesan darinya, lalu tampilkan terakhir-ke-pertama. Jika Anda hanya membutuhkan pesan terakhir, cari di akhir file, lalu kembali n pesan. Ini akan memiliki hasil yang serupa, tetapi dengan kerja yang jauh lebih sedikit dan kinerja yang sebanding atau lebih baik.


1

Anda perlu memisahkan ide penyimpanan dan pengambilan . Bahkan di blog yang Anda sebutkan, entri tersebut kemungkinan disimpan dalam urutan kronologis maju, tetapi ditampilkan dalam urutan kronologis terbalik (mengabaikan fakta bahwa itu menjadi lebih mudah dengan menggunakan penyimpanan terstruktur).

Seseorang dapat dengan mudah menciptakan sistem penyimpanan terstruktur sederhana yang akan menyimpan entri dalam urutan ke depan yang dikenal dengan "catatan" dari bentuk bebas dan panjang variabel dengan pointer byte-offset yang disimpan dalam file sumber daya dalam format panjang tetap (64 bit akan mendukung file lebih dari 18 juta terabyte). Mencari catatan terakhir atau nthcatatan atau last - ncatatan dalam file pointer, maka byte yang ditunjukkannya pada file utama akan sepele dan cepat. Trik yang diizinkan oleh filesystem atau driver khusus adalah membuat atomik ini dan membuat file sumber daya transparan.


0

Apakah Anda mencari endianness yang merupakan urutan byte? Mengapa Anda ingin file log diorganisasikan pada tingkat filesystem daripada hanya memesan melalui katakanlah ls?

Jika ini tentang Endianness, ada beberapa filesystem yang tersedia.


0

Dua pikiran muncul di benak:

Beberapa sistem kontrol versi menyimpan versi pertama file terkontrol secara penuh dan semua versi berikutnya sebagai perubahan, di mana yang lain menyimpan versi file terkontrol saat ini secara penuh, dan semua versi sebelumnya sebagai perubahan.

Jika Anda merekam peristiwa runtime dalam database daripada file datar, mungkin tidak jelas bagi Anda apakah database menyimpan peristiwa secara berurutan, mundur-berurutan, atau sembarangan.


0

Sayangnya tidak ada cara mudah untuk melakukan apa yang Anda inginkan. Ini akan membutuhkan penulisan ulang seluruh file setiap kali entri ditambahkan. Ini akan menjadi lambat dan semakin lambat saat file bertambah. Saya pikir yang terbaik yang dapat Anda lakukan adalah urutan log yang terbalik yang ditampilkan pada layar, tetapi disimpan dalam urutan "normal" pada disk. SQL db dapat melakukan ini dengan mudah, tetapi mungkin lebih dari yang Anda inginkan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.