"Enter"a basıp içeriğe geçin

Elasticsearch neden bu kadar hızlı?

Elasticsearch kullanan herkes ilk kullanımında “Bu nasıl bu kadar hızlı oluyor” ve “Bu kadar hızlı olan sistem nasıl olurda veritabanı olarak kullanılmaz” gibi cümleleri kendi içinden geçirir. Ben de onlardan biriydim ve bu yüzden araştırmaya başladım.

Elasticsearch Nedir

Elasticsearch, büyük verileri saklamak ve bunları işlemek için kullanılan veri deposudur. veriler depolandıktan sonra yüksek derecede hızlı sürelerle o verilerde arama yapmayı sağlar.

Apache Lucene Nedir

Lucene, metin aramaları için geliştirilen yazılımdır. Amacı metin yazılarını oldukça hızlı bir şekilde aramaktır. Lucene, ters indeksleme denilen yapıyı kullanır. (Ters indeksleme, metinler arasındaki benzerlikleri toplayarak onlar üzerinde arama yapmayı sağlar.) Bu sayede anahtar kelimeler kullanarak arama yapabilmeyi sağlıyor. Elasticsearch temelinde luceneyi kullanır.

Neden hızlı

Elasticsearch verileri indeksleme, document ve cache mantıklarını kullanarak saklar / yönetir. Bu sayede hızlıca verilere erişebilir.

Böl, Parçala, Yönet

Elasticsearch verileri olabildiğince böler ve parçalara ayırır. Geriye önbelleğe almak ve önbellekte tutulan sorguları çalıştırmak kalıyor.

Veriler değil, veri setleri

Elasticsearch verileri arama yapmaz, verileri shard adı verilen kümelere sokar ve shardlar arasında arama yapar. Bu sayede veriler oldukça hızlı elde edilir çünkü arama yapılan shard sayısı azdır ancak veriler fazladır.

Shard

Elasticsearch bütün verileri parçalara ayırır ve shard adı verilen yapıyla saklar. Shardlar birden fazla olabilir. Shard içeriğindede document kümeleri vardır. Documentler belirli veya otomatik belirli parametrelere uyulan anlamları birleştirir ve bu sayede verileri optimize bir şekilde elde eder.

Replica

Replica, Shardların kopyası görevini görür. Herhangi bir sorunda verilerin kaybolmaması için kullanılırlar. Eğer bir sorun yaşanırsa sorun yaşanan shardın yerini replicalar tamamlar.

Index

Index, verileri belirli bir anahtar kelimeye bakarak kaydetme ve bunu sorgularkende bu anahtar kelimeler yardımıyla sorgulamaya denir. Indexlerin içerisinde birden fazla shard olur. Indexler güvenlik konfigrasyonlarına sokulabilir ve yetki işlemleri yapılabilir.

Document mantığı

Document, JSON formatında kaydedilen ve içinde fieldler bulunan veridir. Documentler elastic tarafında indexlerin içerisinde tutulur ve bu fieldlere göre optimize eder. Her documentin kendisine özel benzersiz id si bulunur ve bu id ler üzerinden bulunabilirler.

Cache sistemi

Elasticsearch, bütün documentlerin fieldlerini önbelleğe alır. Önbelleğe verileri alırken çeşitli konfigrasyonlarla optimize edilir.

  • Metin: metinlerde bütün veriler toplu şekilde saklanır ve aynı olan verilerle arama yapılır.
  • Sayılar: metinlere kıyasla sayılar daha iyi optimize edilir. Optimize edilmesi için bloklar halinde sayıları saklar.
  • Obje: objeler key:value mantığı ile saklanır. Optimize etmek için aynı keylere sahip documentler önbellekte birleştirilir ve bu sayede döküman tarama hızı azalmış olur.
  • Dizi: diziler apache lucene yapısına gönderilmeden elasticsearch tarafında kendi yapılarını kullanarak saklanırlar. Çünkü apache lucene dizi yapısını desteklemez. Elasticsearch içerisinde multi type değer giremezsiniz. Çünkü aslında elasticsearch tiplere göre optimizasyon yapar bu yüzden arrayler multi type olamaz. (Belirtmekte fayda var, isterseniz multi type diziler oluşturabilirsiniz ancak performans düşüklüğü yaşanabilir.)

Elasticsearch bunlar dışında Least Recently Used (LRU) denen yapıyı da kullanır. Genel olarak amacı en son çalıştırılan sorguları önbelleğe almak ve daha sonrasında tekrar çalıştırılırsa performans artışı sağlamak. Bu sebeple düzgün konfigrasyonu yapılmayan bir elassticsearch querysi çok fazla önbellek tüketebilir.

Elasticsearch vs İlişkisel veritabanları

Elasticsearch veritabanı değildir. Her veriyi özelliklede önemli verileri saklamak için kullanılamaz. Çünkü elasticsearch ilişkisel veritabanları gibi spesifik aramalara sahip değildir. Yedekleme ve kurtarma, verinin bütünlüğü gibi sorunlar ortaya çıkaracağından veritabanı olarak kullanmak kesinlike önerilmez.

İlişkisel veritabanları nasıl optimize oluyor

İlişkisel veritabanları “index” adı verilen yapıyı kullanırlar. Bu yapının amacı sorgu işlemlerinde aranan kelimenin daha kolay bulunması ve verilere daha kolay erişmek için ağaç haline getirmektir. Bu ağaca Balanced Tree (B-Tree) denir. Bir örnek vermek gerekirse, “Örnek”, “Ördek” ve “Önsöz” kelimelerini veritabanı indekslemek isterse öncelikle Ö harfine göre bir sıralama yapar ardından r kısmında Ör içeren içerikler olur ardından ise bu değerlerden birisi bulunmak istenirse bu 3 kelime arasında gezinti yapacaktır. Elbette gelişen teknoloji ve eski teknolojilerde daha farklı yapılar kullanılır (B-Tree tek ağaç yapısı değil. Gelecekteki yazımda diğerki ağaç yapılarından bahsedeceğim.)

Sonuç

Elasticsearch gerçekten çok hızlı ve indeks yapısı, döküman yapısı ve önbellek yapısını bilmeden elasticsearch elimizde anlamsız bir hale gelebilir. Bu yazımda sizlere elasticsearch yapısını anlatmaya çalıştım. Buraya kadar okuduğunuz için teşekkür ederim.

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir