Updatedb ve locate `ne tür bir veritabanı kullanıyor?


25

locateProgramı findutilstaramaları bir ya dosya adları ve görüntüler herhangi maçlar daha veritabanları. findSon dosya adı veritabanı güncellemesi sırasında dosya mevcutsa, bu çok hızlı bir komut olarak kullanılabilir .

Bugünlerde birçok çeşit veritabanı var.

Peki ne tür bir veritabanı updatedbgüncellenir ve locatekullanılır?

Teşekkürler.


Locate'in gerçekten BerkelyDB kullanıp kullanmadığından bağımsız olarak, araştırmaya değer - çok eski, basit, etkili bir disk tabanlı anahtar-değer deposu.
pjc50

@ pjc50 Çok isterim. Veritabanının dosyaları nerede? İçeriklerini nasıl göreyim?
Tim


"Sayfa Bulunamadı", bağlantı serverfault.com/questions/454127/…
Tim

Peki "anahtarlar" ve "değerler" veritabanında neyi temsil ediyor? Stephen Kitt'in unix.stackexchange.com/questions/379725/… ' in yorumunu doğru anladıysam , veritabanı anahtar-değer değildir.
Tim,

Yanıtlar:


29

locate/ updatedbGenellikle uygulamalar, genel bir veritabanı altyapısı yerine, gereksinimlerine göre uyarlanmış özel veritabanları kullanır. Her uygulama tarafından belgelenen bu özel veritabanlarını bulacaksınız; Örneğin:

  • GNU findutils'belgelenmiştir locatedb(5)ve hemen hemen sadece bir dosya listesidir (belirli bir sıkıştırma algoritması ile);
  • mlocate'ler belgelenmiştir mlocate.db(5)ve ayrıca bir dizin ve dosya listesi olarak da kabul edilebilir (meta veri içeren).

Teşekkürler. Özel gereksinimlere uygun belirli veritabanlarını tasarlama ve uygulama ilkelerini nereden ve nasıl öğrenebilirim? Okuma için herhangi bir referansları takdir ediyorum.
Tim

11
Tasarlama veritabanları yüzden bu öğrenmek ve sonra boyut karşılık hızdan tasarım dengeler hakkında ... Ben gibi belki iyi, bir şey olurdu belirli bir kaynağın bilmiyorum tasarlarken veri yapıları aşağı kaynar İnciler Programlama olurdu Bu konular hakkında düşünmenin bir yolu (ve onları fazla düşünmemek).
Stephen Kitt

Teşekkürler. Veri yapıları hakkında bir şeyler öğrendim ve bir sonraki soru veri yapılarından veritabanlarına gitmek için referanslar ve yollar bulmak olacaktır.
Tim

2
Kullanıldığı gibi veritabanları locatesadece diskte depolanan veri yapılarıdır, bu nedenle veri yapılarından ilgili veritabanlarına gitmek oldukça kolaydır. Sorunuz onlara sunarken veritabanlarına gitmek, tamamen başka bir şeydir; bu konulara adanmış kitap ve kurslar var. MongoDB veya PostgreSQL gibi bir veritabanı yönetim sistemi tasarlamak ve geliştirmek, günümüzde bilgisayar bilimi ve yazılım mühendisliğinde, özellikle de olayların dağınık tarafına attığınızda, en büyük sorunlardan biridir.
Stephen Kitt

2
yıllar boyunca locatedb & mlocate.db ile adil bir bit yaptım. Başlangıçta debian'daki dlocateprogramım için bir locatedb oluşturmak için perl kodu vardı . Ben sadece bir metin dosyasını greplemenin bir locatedb'i aramaktan çok daha hızlı olduğunu ve bu günlerde disklerin büyüklüğü göz önüne alındığında dosya boyutu tasarrufunun önemsiz olduğunu keşfettim. Bu yüzden sadece grep geçiş yaptım. Ayrıca mlocate cron işi bittikten sonra mlocate.db dosyasını düz metne döken yerel bir cron işim var, bu da yerel bir qlocatekabuk betiği ile arama yapıyorum .... koşmaktan çok daha hızlı mlocateve ayrıca bazı yararlı ekstra seçenekler de var.
cas,

13

Gnu LibC OBSTACKS Makroları kullanılarak yazılmış / okunmuş, C yapılarının düz bir dosyası gibi görünüyor

Kaynaklara bakın

https://github.com/msekletar/mlocate/blob/master/src/updatedb.c#L720

https://github.com/msekletar/mlocate/blob/master/src/locate.c#L413

İle benzer bir şey elde edebilirsiniz

find / -xdev -type f -not -path \*\.git\/\* | gzip -9 > /tmp/files.gz
zgrep file_i_want /tmp/files.gz

2
Teşekkürler. Sonundaki iki komut ne yapıyor?
Tim

2
@Tim İlk komut, filesystem ( find) 'ı root ( /) dizininden, dizinlerde ( -xdev) değil, diğer dosya sistemlerinde ( ), normal dosyalarda ( -type f) *.gitdizinlere düşmeden arar -not -path \*\.git\/\*. Çıktıyı ( | gzip -9) sıkıştırır ve dosyaya /tmp/files.gz( > /tmp/files.gz) kaydeder . Bir sonraki satır sıkıştırılmış dosyanın içindeki zgrepdosyayı arıyorfile_i_want/tmp/files.gz
piotrekkr

2

Bildiğim kadarıyla , anahtar / değer arka plansız veritabanı olan Berkeley DB . Daha fazla bilgi için bağlantıyı takip edin. Vikipedi’den al:

Berkeley DB (BDB), anahtar / değer verileri için yüksek performanslı bir gömülü veritabanı sağlamayı amaçlayan bir yazılım kütüphanesidir. Berkeley DB, C ++, C #, Java, Perl, PHP, Python, Ruby, Smalltalk, Tcl ve diğer birçok programlama dili için API ciltleriyle yazılmıştır. BDB, isteğe bağlı anahtar / veri çiftlerini bayt dizileri olarak depolar ve tek bir anahtar için birden fazla veri öğesini destekler. Berkeley DB ilişkisel bir veritabanı değildir.

RHEL / CentOS'ta veri tabanının yeri ( /var/lib/mlocate/mlocate.dbdiğer dağıtımlardan emin değil). Bu komut locate --statisticssize konumu ve veritabanının bazı istatistikleri hakkında bilgi verecektir (örnek):

Database /var/lib/mlocate/mlocate.db:
        16,375 directories
        242,457 files
        11,280,301 bytes in file names
        4,526,116 bytes used to store database

Mlocate formatı için burada man sayfasının başıdır:

Bir mlocate veritabanı bir dosya başlığı ile başlar: sihirli bir sayı için 8 bayt (bir C harfi gibi "\ 0molcate"), büyük endian'da yapılandırma bloğu boyutu için 4 bayt, dosya formatı için 1 bayt (0), 1 “görünürlük gerektir” bayrağı (0 veya 1), 2 bayt dolgusu ve veritabanının kökünün NUL ile sonlandırılmış bir yol adı için bayt.

Başlığı, bazı yapılandırma değişikliklerinin içeriğini etkileyebilmesi durumunda, veritabanlarının yeniden kullanılmamasını sağlamak için dahil edilen bir yapılandırma bloğu izler. Yapılandırma bloğunun bayt olarak boyutu dosya başlığında saklanır. Yapılandırma bloğu, değişken adına göre sıralanan bir değişken atama dizisidir. Her değişken ataması NUL sonlandırılmış bir değişken adından ve NUL sonlandırılmış değerlerin sıralı bir listesinden oluşur. Değer listesi bir NUL karakteri ile sonlandırılır. Kullanılan sıralama strcmp () işlevi tarafından tanımlanır.


2
Bu locate/ uygulamasına bağlıdır updatedb...
Stephen Kitt

2
mlocatekesinlikle Berkeley DB kullanmaz.
Stephen Kitt

1
BerkeleyDB talebinizi destekleyen herhangi bir kaynağınız var mı? Cevabınızın ikinci kısmı, bununla çelişiyor.
Mat,
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.