Pertanyaan menarik; Anda biasanya tidak melihatnya sebagai desain. Saya memang memiliki program yang menggunakan teknik yang sedikit mirip untuk merekam sejarah, tetapi menggunakan format biner. 'File log' memiliki empat bagian, semua ditata dalam format netral-mesin:
- Header yang berisi angka ajaib dan jumlah entri (maksimum) dalam daftar yang digunakan dan daftar bebas, nomor urut untuk entri riwayat berikutnya, jumlah aktual entri dalam daftar yang digunakan, jumlah aktual entri dalam daftar gratis , dan panjang file (masing-masing 4 byte).
- Daftar yang digunakan, setiap entri memberikan offset dan panjang (4 byte untuk setiap bagian dari setiap entri).
- Daftar gratis, setiap entri mirip dengan entri daftar yang digunakan.
- Data utama, setiap catatan sejarah yang terdiri dari serangkaian byte yang berdekatan diakhiri oleh byte terminator nol.
Ketika catatan baru dialokasikan, jika ada ruang dalam daftar gratis, maka ia menimpa entri di sana (tidak harus menggunakan semuanya - dalam hal ini fragmen tetap ada dalam daftar gratis). Ketika tidak ada ruang dalam daftar gratis, maka ruang baru dialokasikan di akhir. Ketika catatan lama diputar, ruangnya dipindahkan ke daftar gratis, dan bergabung dengan catatan gratis yang berdekatan. Ini dirancang untuk menangani pernyataan SQL sehingga catatan dapat tersebar di banyak baris. Kode ini berfungsi pada sejumlah catatan tertentu. Itu tidak membatasi ukuran file per se (meskipun tidak akan sulit untuk melakukannya).
Kode sejarah utama kode ada dalam dua file, history.c dan history.h, tersedia dari sumber untuk program SQLCMD (versi saya, bukan milik Microsoft; milik saya sudah ada satu dekade atau lebih sebelum Microsoft), yang dapat diunduh dari Arsip Perangkat Lunak Kelompok Pengguna Informix Internasional . Ada juga program dump file histori (histdump.c) dan tester sejarah (histtest.ec - ia mengklaim sebagai ESQL / C, tetapi itu sendiri benar-benar kode C; salah satu fungsi dukungan yang dipanggil menggunakan beberapa Informix ESQL / C fungsi perpustakaan). Hubungi saya jika Anda ingin bereksperimen tanpa menggunakan Informix ESQL / C - lihat profil saya. Ada beberapa perubahan sepele yang harus dilakukan untuk mengkompilasi histtest di luar lingkungan desainnya, plus Anda perlu makefile.