Elasticsearch

İş gereği, son dönemde Elasticsearch’e hızlı bir giriş yapmak zorunda kaldım. Bu konudaki Türkçe doküman eksikliğini de biraz olsun kapatmaya yardımcı olması adına, Elasticsearch’i öğrenme sürecindeki notlarımı paylaşmak istedim.

Kısaca Elasticsearch

Kopyala yapıştır resmi tanımları bir kenara bırakarak, Elasticsearch‘in ne olduğunu ve neden kullanmamız gerektiğini bir senaryo üzerinden inceleyelim.

Bir “Dating” (arkadaşlık) mobil uygulaması yazdınız diyelim. Varsayalım ki projeniz yürüdü ve insanlar çılgınlar gibi uygulamanızı indirip kullanmaya başladı. Her dakikada bir yeni üye kayıt oluyor, her  saniye yeni bir “Selam güzel bağyan danışalım mı acaba?” mesajı  gönderiliyor.

elcin-hanim

Böyle bir veri yoğunluğun, sunucuya ve veritabanına getireceği yükü tahmin edebildiniz değil mi? Basit bir hesapla, MySQL veritabanınızın kullanıcı mesajlarını barındıran tablosunda yaklaşık olarak, bir günde 85.000, bir haftada, 600.000 ve bir ayda 2,5 milyon kayıt olacak. Kısacası, artık hızla büyüyen bir Big Data‘ya sahipsiniz.

Big Data’nın geleneksel RDBMS veritabanlarında saklanması; performans, esneklik ve yatay genişletilebilirlik açısından maliyetli olması, geliştiricleri yeni bir yapı geliştirmeye zorladı ve ortaya “Search Engine” adı verilen arama motorları ortaya çıktı.

Elasticsearch de Apache Lucene tabanlı, açık kaynak bir arama motoru. Amacı basit: “Hızlı bulmak”. Öne çıkan bazı özelliklerine kısaca bakalım:

Schema-Free: Bu terimi “Biçimsiz” diye çevirsem ayıp olmaz herhalde. Elasticsearch’e ekleyeceğiniz kayıtların (doküman), belirli bir düzende olması zorunluluğu bulunmuyor. JSON biçiminde ve istediğiniz biçimdeki kayıtları aynı tabloda (type) bulundurabilirsiniz.

Örnek olarak; ilk kayıt aşağıdaki gibi iken;

İkinci kayıt şöyle olabilir:

Near Real-Time (Yaklaşık Gerçek Zamanlı): Elasticsearch, ortamlarda her ne kadar kendisini Real-Time olarak tanıtsa da, aslında Near Real-time’dır. Real-time olmayan işetim sistemlerinde gerçek zamanlılıktan söz etmek mümkün olmadığı gibi, burada asıl vurgulanmak istenenin, işlemlerin gözle görülemeyecek derecede hızlı olması sanıyorum.

RESTful API: Elasticsearch üzerinde REST API’ler ile bütün işlemleri, HTTP protokolü üzerinden, ek bir istemciye gerek kalmadan gerçekleştirebilirsiniz.

Örneğin, web tarayıcınızın adres satırından Elasticsearch üzerinde işlem yapabilirsiniz. Aşağıdaki HTTP isteği, bize “kullanici” indeksindeki “ad_soyad” alanı “Demet Akalın” olan dokümanları JSON olarak döndürür. “Pretty” parametresi, JSON’ı daha okunaklı bir şekilde biçimlendirir.

Eğer indekste aranan kayıt varsa, tarayıcımıza gelen JSON cevabı şöyle olacak:

Horizontal Scalability (Yatay Genişletilebilirlik): Elasticsearch’de her bir “cluster”, birden fazla düğüm (node) içerebilir. Veri yoğunluğunuz arttıkça, sisteme yeni bir düğüm eklemeniz yeterli olacaktır.

Kurulum

Elasticsearch kurulumu, herhangi bir programın kurulumundan daha basit. Windows için; indirme sayfasından ilgili ZIP dosyasını indirerek, yerel diskimizde bir klasöre açmamız yeterli. “bin” dizini altındaki “elasticsearch.bat” dosyasını çalıştırdığımızda, Elasticsearch sunucusu yerel bilgisayarımızda çalışmaya başlayacak.

elasticsearch-sunucu

Sunucumuzu test etmek için web tarayıcımızın adres satırına, varsayılan port olan 9200 üzerinden istek yapıyoruz.

Sonuç olarak bize, sunucu bilgilerini içeren bir JSON dokümanı dönüyorsa her şey yolunda demektir.

RDBMS vs Elasticsearch

Çoğu kişinin düştüğü bir hata, RDBMS veritabanları ile Elasticsearch’i kıyaslamaktır. Her ikisi de veri depolama işlevini sağlasa da, ayrı amaçlara hizmet ediyorlar ve birbirlerinin yerine geçmeleri söz konusu değil.

Aralarındaki benzerlikleri göz önünde bulundurarak, RDBMS kültüründen gelenler için bazı kavramların Elasticsearch’teki karşılığı şöyle:

RDBMS Database -> Elastic Index

RDBMS Table -> Elastic Type

RDBMS Row -> Elastic Document

RDBMS veritabanları; veri güvenliği, yetkilendirme, Foreign Key, tablolar arası ilişkilendirme ve benzeri özellikleriyle karmaşık sistemlerin altyapısında kullanılmaya devam edecek. Elasticsearch ve benzerlerinin ise asıl amacı, veriye hızlı erişilebilirlik.

Bu nedenle, Elasticsearch’i bir RDMBS’in yanında kullanmayı da tercih edebilirsiniz.

Elasticsearch-PHP Kütüphanesi

Elasticsearch’in RESTful olduğundan ve üzerinde işlem gerçekleştirmek için ek bir araca ihtiyacınız olmadığından bahsetmiştik. Bu demek oluyor ki, eğer Elasticsearch’i PHP ile kullanmak istersem CURL benim için yeterli olacaktır.

Ancak Elasticsearch geliştiricileri, PHP ve diğer diller için “low-level” kütüphaneler geliştirmişler. Bu kütüphaneleri hata yakalama, enkapsülasyon vb. gibi avantajları nedeniyle CURL’e tercih etmenizde fayda var.

Elasticsearch’in resmi PHP kütüphanesi Elasticsearch-PHP. Bilgisayarınıza Composer ile kurmak için:

Aşağıdaki kod bloğu, “kullanici” indeksine ve “kullanici” tipine, yeni bir doküman kaydeder.

Bu kod bloğu da, “ad” alanı “demet” olan kullanıcıları arayan “search” metoduna bir örnek:

Sonuç

Bu yazıda bahsettiklerim, Elasticsearch’in elbette sadece görünen yüzü. Çok daha kompleks uygulamalar için Elasticsearch’in derinliklerine dalmanız gerekecektir. Benim naçizane tavsiyem, Big Data’nın öneminin her geçen gün arttığı günümüzde, yenilikler kervanını kaçırmamanız ve yeni teknolojileri uygulamalı olarak öğrenmeniz olacaktır.

Facebook Twitter Digg Delicious

11 Temmuz 2016 tarihinde yayınlandı.