ELASTICSEARCH Nədir?

Elasticsearch

Datalarımızı(Big Data or any) düzgün saxlamaq və təhlil etmək üçün ilk növbədə ehtiyaclarımızı yaxşı görə bilməliyik.

Böyük məlumat blokları arasında tam mətn axtarışına ehtiyacımız varsa, Elasticsearch bizim üçün düzgün seçim ola bilər.

Elasticsearch: Birbaşa mətn üzərində axtarış etmək əvəzinə, indekslər vasitəsilə axtarış aparır və çox tez nəticələr verir. Bundan əlavə, o, həmçinin sorğular üzrə statistik təhlil və qiymətləndirmə apara bilər.

Elasticsearch mətn üzərində necə axtarış aparır?

Biz məlumatları Elasticsearch-də saxladığımız zaman, məlumatda göstərdiyimiz sahələr Apache Lucene infrastrukturundan istifadə edərək indekslənir. Elasticsearch, verilənləri yadda saxlayarkən axtarış olunan sözün hansı sənəddə (sətirdə) olduğunu indeksləşdirir. Sonra biz sözləri axtarmaq istədikdə, bütün məlumatları axtarmaq əvəzinə, nəticələr əvvəllər yaradılmış indeks siyahısı vasitəsilə daha tez tapılır.

Elasticsearch İnfrastruktur

Elasticsearch tamamilə Java dilində yazılmış distributed arxitekturaya malik açıq mənbəli proyektdir. 

Axtarış motoru axtarış sistemi mövzuları ilə maraqlananların eşitmiş ola biləcəyi Apache Lucene layihəsinə əsaslanır. Lucene layihəsi, əsasən struktursuz(semi-structured, unstructured) adlandırdığımız düz mətnlərin indeksləşdirilməsini və axtarışını təmin edir. Digər tərəfdən, Elasticsearch-in Lucene infrastrukturunda strukturlaşdırılmış dediyimiz məlumat strukturu müəyyən sənədlərin indeksləşdirilməsini və axtarışını təmin edir. Nəticə olaraq, Elasticsearch-də saxlanılan hər bir sənəd JSON obyektidir və həmin sənədi digər sənədlərdən fərqləndirən unikal identifikatora malikdir.

Elasticsearch framework-dən nələri gözləmək olar?

SÜRƏT

Əvvəla, Elasticsearch frameworkun ən vacib xüsusiyyəti kimi çox sürətli olmasını qeyd edə bilərik. İlkin olaraq elasticsearch əlaqəli verilənlər bazası sisteminin(RDBMS) saxlaya biləcəyi bütün məlumatları saxlaya bilər, həmçinin bu məlumatları verilənlər bazası sistemindən daha sürətli sorğulamağa imkan verir. Bu sürəti təmin etmək üçün ədədi dəyərləri, coğrafi dəyərləri, tarixləri və mətnləri saxlaya bilən xüsusi indeks strukturlarından istifadə edir.

Ancaq bir istifadəçi olaraq bu texniki detalları bilməyə ehtiyac yoxdur. Əsasən, siz milyonlarla, hətta trilyonlarla cərgədən ibarət olan məlumatlarınızı elasticsearch-ə JSON formatında göndərirsiniz və düzgün konfiqurasiya, istifadəsi çox asan API ilə məlumatlarınıza millisaniyələrlə çata bilərsiniz.

MİQYASLILIQ(SCALABILITY)

Elasticsearch noutbukda və ya petabaytlarla məlumatın saxlandığı nəhəng server platformalarında işləyə bilər. Bunu etmək üçün mürəkkəb quraşdırmalara ehtiyacınız yoxdur. Klaster quraşdırmaları elasticsearch infrastrukturu tərəfindən avtomatik həyata keçirilir.

Üstəlik, laptopunuzda quraşdırılmış elasticsearch ilə əlaqə saxlamaq minlərlə serverdən ibarət elasticsearch klasteri ilə ünsiyyət qurmaq qədər asandır. Elasticsearch həmçinin məlumat və indeksləri sizin üçün necə saxlamağa avtomatik qərar verir.

ASAN İSTİFADƏ

Təqdim etdiyi REST API-lari sayəsində Elasticsearch rəqibləri ilə müqayisədə olduqca asanlıqla istifadə edilə bilir. Üstəlik, hər dil üçün yazılmış xüsusi kitabxanaları ilə onu Java, C#, Python, Javascript, PHP, Ruby kimi bir çox proqramlaşdırma dilləri ilə istifadə edə bilərsiniz.

Elasticsearch-in xüsusiyyətlərini araşdıraq;

  • Java əsaslıdır.
  • Apache Lucene üzərində qurulmuşdur. (Paylaşılan(shared) və Replika anlayışları Elasticsearch-də də keçərlidir.)
  • Açıq mənbədir.
  • Məlumatların saxlanması formatı əlaqəli deyil, sənəd yönümlüdür.
  • Paylanmış(distributed) və miqyaslana(scalable) bilən strukturda işləyə bilər.
  • Real vaxt rejimində məlumatları təhlil etməyə imkan verir.
  • Type, Documents, Fields, Indicates, Full-text axtarışı, İndeks kimi anlayışlara malikdir (aşağıda onların izahatlarını görəcəksiniz.)
  • RestfullAPI əsaslı olduğu üçün bütün proqramlaşdırma dilləri ilə istifadə oluna bilər.
  • Məlumat növünə uyğun olaraq avtomatik data Mapping həyata keçirə bilər.
  • Monitoring və Data Vizuallaşdırılması üçün Kibana və log-lara nəzarət etmək üçün Logstash ilə çox uyumlu çalışır.
  • Sənədləri JSON kimi indeksləşdirir.
  • Sürətli quraşdırma və asan konfiqurasiya özəlliyi sayəsində Elasticsearch-i rahat istifadə etmək mümkündür.
  • Məlumatların Elasticsearch-ə ötürülməsi olduqca asandır.
  • Həmçinin HBase, Cassandra, MongoDB kimi NOSQL verilənlər bazalarından ElastichSearch-ə yazmağa imkan verir.

Gəlin Elasticsearch komponentləri və əsas prinsipləri haqqında danışaq;

İndice

Yuxarıda göründüyü kimi, Elasticsearch-də klassik əlaqəli verilənlər bazalarında verilənlər bazası əvəzinə İndice anlayışlarından istifadə olunur.

Elasticsearch Cluster bir neçə İncide-dən (verilənlər bazasından) ibarət ola bilər.

Type

Əlaqəli verilənlər bazasındakı cədvəllər üçün Elastcisearch “Type” anlayışından istifadə edir. Bir İndice birdən çox Type(table)-dan ibarət ola bilər.

Document

Elasticsearch-də əlaqəli verilənlər bazalarındakı sətirlər Sənədlər(Documents) kimi saxlanılır. Hər bir Type-ın birdən çox sənədi(Documents) var.

Field

Klassik verilənlər bazalarındakı sütunlar Elasticsearch-də Sahələr(Fields) kimi uyğun gəlir. Hər bir sənədin(Documents) birdən çox field-i var.

Full-text search

İstənilən mənbədən götürülmüş mətn sənədləri arasında istənilən açar sözü axtararaq açar sözə uyğun gələn sənədlərin tapdığı nəticələrə tez çatmaq üçün istifadə edilən Elasticsearch özəlliyidir.

Məsələn, deyək ki, siz wikipedia.com saytında bir alimin adını axtarırsınız və bu haqda yazılan məqalələri oxuyursunuz.

Vikipediyanın axtarış çubuğuna Nikola Tesla adını yazdığınız zaman, onun haqqında məqalə tapmaq üçün bütün qeydiyyatdan keçmiş məqalələri axtarmaq əvəzinə, dərhal əvvəllər indekslənmiş məlumatlar arasında Nikola Teslanın adının çəkildiyi indeksə getməyə və sizə tez bir zamanda düzgün data ilə geri dönməyə imkan verən bir özəllikdir.

İndex

Elasticsearch-ə əlavə edilən hər bir qeyd JSON sənədi kimi saxlanılır. Yəni sənədlərinizdəki hər bir söz (termin) üçün həmin sözün hansı sənəddə və ya sənədlərdə olduğunu saxlayan indeksləşdirmə sistemi sayəsində idarə olunur. Siz bunu verilənlər bazası kimi düşünə bilərsiniz. Verilənlər bazasındakı məlumatların düzülüşü kimi, Elasticsearch-in indeksləri də JSON formatında saxlanılır.

Mapping

Verilənləri indeksləşdirərkən bu məlumatın hansı növ olduğunu göstərməliyik. Başqa sözlə, bir sözü indeksləşdirərkən, bu sözün məlumat tipinin (string, integer, boolean) qeyd etməliyik.

RestfullAPI

REST user-server əlaqəsi üçün bir arxitekturadır. Restfull servisləri user-server arasında bir çox müxtəlif response növlərini (JSON, XML, CSV, HTTP) qaytara bilər. RestfullAPI isə bu xidmətlərdən istifadə edən API-dir.

Near Real Time

Elasticsearch real vaxta yaxın bir sürətlə işləyir. Real vaxt əvəzinə “yaxın real vaxt” adlanır, çünki sənədləri real vaxtdan bir qədər fərqli gecikmə ilə indeksləşdirir. (Bu adətən bir saniyəlik gecikmə ola bilir.)

Cluster

Bütün məlumatlarınızı bir yerdə saxlayan və bütün indeksləşdirmə və axtarış imkanlarını yerinə yetirən çoxsaylı node-larnda ibarət cluster və ya node-lar toplusu demək olar.

Cluster, standart olaraq, “elasticsearch” adlandırılır. Bu nomenklatura istəyə görə dəyişdirilə bilər. Adlandırma vacibdir, çünki node yalnız clusterin bir hissəsi ola bilər. 

Node

Tək bir serverə verilən addır. Məlumatların saxlandığı maşınların hər biri node adlanır. Cluster-ların indeksləşdirilməsi və axtarış imkanları bu node-lar sayəsində həyata keçirilir. CLuster-da adlandırma məntiqində olduğu kimi, node-lara ilkin olaraq unikal id (Universal Unikal İdentifikator (UUID)) təyin edilir.

Bu adlandırma node-lar arasında məlumat mübadiləsinin idarə edilməsi üçün çox vacibdir. İstənilən halda bu adlar dəyişdirilə bilər.

Shard

Bir anda milyonlarla sənədi indeksləşdirmək üçün kifayət qədər server imkanınız olmaya bilər. Tutaq ki, bir anda 2 TB məlumatı indeksləməlisiniz, bu halda, bu indeksləşdirməni tək bir node ilə etmək istədiyiniz zaman, tam disk tutumu və ya həddindən artıq yavaş indeksləşdirmə sürəti ilə qarşılaşa bilərsiniz. Bunun qarşısını almaq üçün Shard və Replica anlayışları mövcuddur.

Hazırlanacaq indeks yenidən node-da shard-lara bölünür. Bu shard-lar öz istəyinizə uyğun tənzimləyə bilərsiniz.

Shard arxitekturasından istifadənin iki əsas məqsədi var;

Bu, bir çox node-da əməliyyatları paralelləşdirməyə imkan verir. Beləliklə, performansı artırır.

Text həcmini horizontal olaraq bölməyə və miqyaslandırmağa(scale) imkan verir.

Replica

Shard-lardan hər hansı birinin itməsi halına qarşı Elasticsearch indeks shard-larının bir və ya bir neçə nüsxəsini yaratmağa imkan verən replika-shard strukturuna malikdir.

Shard-larin replikasiyası eyni node-larda yerləşdirilməməlidir. Bir node down olduqda, məlumat itkisinin qarşısını almaq üçün digər node-larda həmin node-da olan shard-ların ehtiyat nüsxələrinin olması vacibdir.

Shard və Replikaların müxtəlif node-lar arasında bölünməsinin sxemi bu şəkildədir:

Elasticsearch-də Replikalar və Shard-ların əvvəldən müəyyən edilməsi məcbur deyil. Ancaq istəyə bağlı olaraq təyin edə bilərsiniz.