Elasticsearch vs Geleneksel Veritabanları


 

sql-vs-es

Geleneksel veritabani sistemlerinden, dokuman tabanli bir veritabani sistemine geciste yapilarin farkli olmasi nedeniyle ilk baslarda zorluk cekebiliyoruz, bu yazida ufak ufak SQL’de boyle yapilan birseyi elastic’te nasil halledebilegecimize yada SQL’deki birseyin elasticsearch karsiliginin ne olduguna deginmek istiyorum.

1) Index derken?

Indexler dokumanlari tuttugumuz alandir, bir index farkli tipte dokumanlar icerebilir.

Sql:

CREATE DATABASE deneme;

Elasticsearch:

curl -XPUT 'http://localhost:9200/deneme/'

2) Tip nedir?

Veritabanindaki tablolar gibi dusunebiliriz bunu,

Ornegin bizim indeximize 2 farkli turde icerik ekleyelim.

Not: Json  keylerini veritabani kolonu gibi dusunebiliriz, bu kolonlarin hangi tip veri tutacagini da mapping ile belirleyebiliriz.

a) Urun

curl -XPUT 'http://localhost:9200/deneme/urun/1' -d '{
"urun_adi": "Kulaklik",
"urun_aciklama": "lorem ipsum dolor sit amet",
"stok": "241",
"fiyati": "45"
}'

b) Musteri

curl -XPUT 'http://localhost:9200/deneme/musteri/1' -d '{
"adi": "John",
"soyadi": "Doe",
"dogum_tarihi" : "23/02/1984"
}'

Index’e attigimiz veriler soyle json formatinda gorunuyor:

es-musteri es-urun

3) Select Islemi

SQL:

 select * from *

Elasticsearch:

 curl -XGET 'http://localhost:9200/deneme/_search'

SQL:

 select * from urun;

Elasticsearch:

 curl -XGET 'http://localhost:9200/deneme/urun/_search'

4) Update Islemi

SQL:

 Update urun set fiyat=60 where id=1;

Elasticsearch:

  curl -XPOST 'http://localhost:9200/deneme/urun/1/_update' -d '{ "doc" : { "fiyati": 60 } }'

Elasticsearch:

 curl -XPOST 'http://localhost:9200/deneme/urun/1/_update' -d '{ "doc" : { "fiyati": 75, "renk":"mavi" } }'

(Bu ornegi SQL ile yapamazsiniz, cunku renk diye bir kolon yok tabloda)

5) Delete Islemi

SQL:

delete from urun where id=1;

Elasticsearch:

curl -XDELETE 'http://localhost:9200/deneme/urun/1'

6) Arama Islemleri

Isin en onemli ve karmasik kisimlarindan birisi burasi.

SQL:

 select * from musteri where a=b or x=y and z like 'k' ....

gibi bir sart elasticte bool query’ler sayesinde olusturuluyor. Surayi okumanizda fayda var.

Bool query’ler soyle bir guzellik sagliyor, misal haber sitesinde arama yaptiniz, tabii ki aradiginiz terim baslikta geciyorsa daha onplanda olmali. Bu gibi durumalarda querylere agirlik vs.. verip bu one cikarma isleri yapilabilmekte.

a ) LIKE gibi query

select * from musteri where adi like 'murtaza%';

gibi bir sql sonucunu elasticsearch’te

GET /deneme/musteri/_search

{ "query": { "wildcard": { "adi": "murtaza*" } } }

sorgusu olarak yapabiliriz. Bu konuda ayrintilari dokumandan bakabilirsiniz.

b ) Eslesen Query

GET /deneme/musteri/_search

{ "query": { "match": { "adi": "john" } } }

7) Aggregation

SQL’de alistigimiz SUM, GROUP BY gibi operasyonlari aggs queryleri ile yapabiliyoruz. Detaylar icin suraya alalim.

Elasticsearch’un dokumanina alismak biraz zaman alabiliyor, eger daha once karsilasmadiginiz terimleri duyuyorsaniz. Baslangicta mutlaka https://www.elastic.co/guide/en/elasticsearch/guide/current/modeling-your-data.html kismini okuyun. Umarim faydali olmustur.

Reklamlar

Bir Cevap Yazın

Aşağıya bilgilerinizi girin veya oturum açmak için bir simgeye tıklayın:

WordPress.com Logosu

WordPress.com hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Twitter resmi

Twitter hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Facebook fotoğrafı

Facebook hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Google+ fotoğrafı

Google+ hesabınızı kullanarak yorum yapıyorsunuz. Çıkış  Yap / Değiştir )

Connecting to %s