The locate
program findutils
scan satu atau lebih database dari nama file dan menampilkan setiap pertandingan. Ini dapat digunakan sebagai find
perintah yang sangat cepat jika file itu ada selama pembaruan database nama file terakhir.
Ada banyak jenis database saat ini,
- database relasional (dengan bahasa query misalnya SQL),
-
database berorientasi dokumen (mis. MongoDB)
Database nilai-kunci (mis. Redis)
Database berorientasi kolom (mis. Cassandra)
Jadi, basis data apa yang updatedb
diperbarui dan locate
digunakan?
Terima kasih.
Jawaban:
Implementasi dari
locate
/updatedb
biasanya menggunakan database spesifik yang disesuaikan dengan kebutuhan mereka, daripada mesin database generik. Anda akan menemukan database spesifik yang didokumentasikan oleh setiap implementasi; sebagai contoh:findutils
'didokumentasikanlocatedb(5)
, dan cukup banyak hanya daftar file (dengan algoritma kompresi tertentu);mlocate
Didokumentasikan dalammlocate.db(5)
, dan juga dapat dianggap sebagai daftar direktori dan file (dengan metadata).sumber
locate
hanya struktur data yang disimpan di disk, jadi pergi dari struktur data ke database yang sesuai relatif mudah. Pindah ke basis data saat pertanyaan Anda disajikan adalah hal yang sama sekali berbeda; ada buku dan kursus yang didedikasikan untuk topik-topik itu. Merancang dan mengembangkan sistem manajemen basis data seperti MongoDB atau PostgreSQL adalah salah satu masalah yang lebih sulit dalam ilmu komputer dan rekayasa perangkat lunak saat ini, terutama ketika Anda melempar sisi terdistribusi.dlocate
program saya di debian. Saya akhirnya menemukan bahwa hanya mengambil file teks berkali-kali lebih cepat daripada mencari locatedb, dan mengingat ukuran disk hari ini penghematan ukuran file tidak signifikan. Jadi saya beralih ke hanya grep. Saya juga memiliki pekerjaan cron lokal yang membuang mlocate.db ke teks biasa setelah pekerjaan mlocate cron berjalan, yang saya cari denganqlocate
skrip shell lokal .... jauh lebih cepat daripada menjalankanmlocate
dan juga memiliki beberapa opsi tambahan yang berguna.Tampaknya merupakan file flat dari C struct, ditulis / dibaca menggunakan Gnu LibC OBSTACKS Macro
Lihat sumber
https://github.com/msekletar/mlocate/blob/master/src/updatedb.c#L720
https://github.com/msekletar/mlocate/blob/master/src/locate.c#L413
Anda bisa mendapatkan sesuatu yang serupa
sumber
find
) dari direktori root (/
), tanpa turun ke direktori di filesystem lain (-xdev
), file biasa (-type f
), bukan di*.git
direktori (-not -path \*\.git\/\*
). Ini mengkompresi output (| gzip -9
) dan menyimpannya ke file/tmp/files.gz
(> /tmp/files.gz
). Baris berikutnya sedang mencarizgrep
filefile_i_want
di dalam file terkompresi/tmp/files.gz
Sejauh yang saya tahu di belakang adalah Berkeley DB yang merupakan basis data kunci / nilai daemonless. Ikuti tautan untuk info lebih lanjut. Ekstrak dari Wikipedia:
Lokasi basis data di RHEL / CentOS adalah
/var/lib/mlocate/mlocate.db
(tidak yakin tentang distribusi lainnya). Perintah inilocate --statistics
akan memberi Anda info tentang lokasi dan beberapa statistik basis data (contoh):Untuk format mlocate di sini adalah kepala halaman manual:
sumber
locate
/updatedb
...mlocate
pasti tidak menggunakan Berkeley DB.