Yazı hakkında bir yorum bırakmak için tıklayın.
Bu yazıya sizde katkıda bulunabilirsiniz.
“index” kelimesi Elasticsearch’de biraz istismar edilmiş. Anlamak için kısaca bakalım:
Elasticsearch’de bir index ilişkili bir veritabanındaki veritabanları gibidir.
Verileri sakladığınız yerlerdir. Ama gerçekte, bu sadece senin uygulamanın gördüğüdür.
Temelde, bir index bir veya daha fazla shardı temsil eden mantıksal bir alan adıdır.
Ayrıca, “to index” (index’lemek) kavramıda veriyi Elasticsearch’e koymak/yüklemek anlamına gelmektedir. Verinizin geri istenebilecek şekilde saklandığını ve arama yapılabileceğini ifade eder.
inverted index Lucene’in verileri aranabilir yapmak için kullandığı bir veri yapısıdır.
Bu işlemde dökümanın içerdiği verilerden tokenlar ve tekil terimler ortaya çıkarılır.
Bu konu hakkında daha fazla bilgi almak için buraya
bakabilirsiniz.
shard bir Lucene instance’ıdır. Kendi başına tamamen işlevsel bir arama motorudur. Bir
index tek başına bir sharddan oluşabilir, ama genellikle index in büyüyebilmesi
ve bir kaç node üzerinde dağıtılabilmesi için bir kaç sharddan oluşmaktadır.
primary shard bir döküman için ev sahipliği yapmaktadır. Bir replica shard ise
primary shard bir kopyasıdır ve (1) primary bir şekilde hata verdiğinde ya da
düştüğünde, (2) okuma çok arttığında, kullanılmaktadır.
Her shard birden fazla segment içermektedir ve bu segmentler bir inverted indextir.
Bir shard üzerindeki bir arama sırayla her bir segment‘de aranacaktır ve sonra
sonuçlar bu shard için son bir sonuçlar kümesinde toplanacaktır.
Siz bir dökümanı indexlerken(indexing), Elasticsearch onları bellekte(memory)
toplayacaktır (ve güvenlik için transaction log‘da), sonra her saniye veya daha fazla
zamanda bir bunu yapar, disk’e yeni bir segment oluşturur, ve aramaları refresh eder.
Bu veriyi yeni bir segment içerisinde aranabilir yapar, ama bu segment diske
fsync edilmemiş haldedir. (Bende aynı soruyu kendime sordum. fsync nedir?) Veri halen
kaybolma riskine sahiptir.
Elasticsearch, sık sık fsync anlamına gelen flush işlemini yapar, (şimdi veri
işlenmiştir.) ve artık gereksiz hale gelen transaction logu temizler. Çünkü biz artık
biliyoruz ki veri diske yazılmıştır.
Ne kadar çok segment varsa aramalar o kadar uzun sürer. Yani Elasticsearch arkaplanda
çalışan birleştirici işlemler (merge process) ile benzer büyüklükteki bir kaç segmenti
daha büyük bir segmente birleştirecektir. Yeni oluşan daha büyük segment diske
yazıldıktan sonra eskileri silinecektir. Bu işlem bir çok aynı büyüklükte segment
olduğu sürece tekrar eder.
Segmentler değişmezdir. Bir döküman update edildiğinde, eski döküman silindi olarak
işaretlenir, ve yeni bir döküman eklenir. Birleştirme işlemleri aynı zamanda silinen
dökümanlarıda çıkarır.