Cədvəl deyəndə ağlımıza adətən nə gəlir? Sütunlar və sətirlərin kəsişməsindən ibarət, içində çoxlu xanalar olan, məlumatların strukturlu toplusu. Öyrəşmişik ki, həmişə sətirlərdə elementlər, sütunlarda isə atributlar olur. Məsələn, məktəbdə tarix dərsində qiymət alan uşaqlar:
Cədvəllərin bu tipdə olmasına öyrəşmişik. Elə böyük cədvəllər və databazalar olur ki, orada sətirlərin sayı minlərlə, milyonlarla, hətta milyardlarla olur. İndi isə təsəvvür edin ki, sətirlər və sütunların yeri dəyişib:
Yəqin ki, bir az qəribə gəldi. Amma bu da cədvəldir. Sadəcə olaraq, sətirlərin sayı az, sütunların sayı isə çoxdur.
Əsası Yandex-də işləyən işçilər tərəfindən 2009-cu ildə qoyulan Clickhouse verilənlər bazası da belə işləyir. Standart olaraq öyrəşdiyimiz MySQL, PostgreSQL kimi bazalardan fərqli olaraq burada sütun sayları az, sətirlər çox olur.
Azərbaycanın ən böyük veb-platforması olan, ölkəmizdən indiyə kimi çıxmış ən yaxşı layihələrdən biri (kimlər üçünsə bəlkə də birincisi) olan Smartbee reklam şəbəkəsində də böyük həcmdə məlumat yığılırdı. Məsələn, siz bir reklam bannerinə klik edirsiniz. Üzdən sadə görünən bu əməliyyatın arxasında xeyli məlumat yığılır: kim hansı saytda, hansı brauzerdən, hansı İP ünvandan, hansı URL-də, hansı cihazdan, saat neçədə hansı şirkətin reklamına etdi?
Datanın sayı çoxaldıqca da yığılan məlumatları analiz etmək, report hazırlamaq getdikcə çətinləşirdi. Layihənin rəhbəri, eyni zamanda da CTO-su olan Fərid Kərimovun yoxlamadığı şey yox idi. Bayram günlərində, gecə saatlarında da yüzmilyonlarla sətiri bir bazadan o birinə atır, optimizasiya aparırdı. Amma yenə də tam istənilən nəticə alınmırdı.
Çoxları xatırlayar, əvvəllər Smartbee-də reklamverən kimi nisbətən kompleks sorğu verəndə (məsələn, keçən ilin noyabrın 15-dən yanvarın 8-ə qədər filan saytda, filan növ format üçün reklamın statistikasını çıxartmaq) adminpanel saniyələrlə fikirləşirdi. İstifadəçi üçün 3-5 saniyə elə də böyük şey deyil, amma biz başa düşürdük ki, sistem böyüdükcə və inkişaf etdikcə gecikmə daha da çoxalacaq.
O vaxt Fəridə, həm də Smartbee-nin əsas proqramçısı olan Emil Abbasova məsləhət görmüşdüm ki, Clickhouse sisteminə diqqət etsinlər. Yandex-də istifadə ediblər, data extraction speed yüksəkdir, özü də open-source layihədir, götürün, işlədin. Amma yoxlamamışdılar😊. Yəqin fikirləşiblər ki, bu Tural İT-şnik deyil, o nə bilir axı biz nə iş görürük.
Bir müddət keçdi, sonra Azərbaycanın ən yaxşı İT-mütəxəssislərindən biri olan, hazırda məşhur Yelp şirkətinin London ofisində işləyən İlkin Məmmədzadə Smartbee-yə texniki konsultasiya verməyə başladı. Bir müddətdən sonra o da tövsiyə etdi ki, Clickhouse işlətmək lazımdır. Və…
Nəticələr gözlədiyimizdən də yaxşı oldu. Zatən, Clickhouse işlədənlərin çoxusu qeyd edir ki, sistem gözlədiklərindən daha tez və sürətli işləyir.
Miqyaslanmaq (scalability) – yüzlərlə qiqabayt məlumatı saxlamaq və emal etmək mümkündür.
Məlumatları sıxmaq (zip) – tanıdığımız WinRar proqramı kompüterimizdəki məlumatları necə sıxıb sonra əks-arxivasiya edirsə, Clickhouse da məlumatları da eyni şəkildə arxivləşdirə bilir.
Hadoop, MySQL, Redis, Mongo DB və s. ilə müqayisədə yüzlərlə dəfə (!) daha sürətlidir. Bizim işlətdiyimiz Smartbee-də hələ o qədər də çox böyük data yoxdur, amma data sayı həndəsi silsilə ilə artsa da, problem yoxdur. Datanın həcmi böyüdükcə, Clickhouse-un sürəti bir o qədər daha çox görünəcək. Şərab qalıb köhnəldikcə nə qədər dadlı olursa, bu da elədir😊
Hazırda Clickhouse sayəsində Smartbee sistemində istənilən növ məlumatları reklamverən tərəfdə çox tez bir zamanda əldə etmək mümkündür.
Bəs bunun pis cəhəti yoxdur?
Əlbəttə ki, var.
Əvvəldən onu demək lazımdır ki, Clickhouse analitika üçündür. Sayta girənlərin statistikasını ölçmək, real-time hesabat düzəltmək, elmi araşdırma (big data sahəsində) üçün o idealdır. Amma bir şey var ki, məlumatlar verilənlər bazasına yazılır, amma dəyişdirilə bilmir. Yəni read edə bilirsən, amma modify etmək olmur.
Gəlin, nümunələrdə baxaq. Aşağıdakı 2 keysin hansında Clickhouse istifadə etmək məsləhətdir?
- Tutaq ki, Azərbaycanda hava proqnozu üçün mobil tətbiq yaradırıq. Hər gün, hər saat, hər rayon üzrə havanın temperaturunu sistem databazaya yazır. Bu halda ClickHouse işlətməyə dəyərmi?
- Tutaq ki, cibimizdəki pulun saxlanıldığı elektron pulqabı yaradırıq (m10 kimi😊). Balansda nə qədər pulun olduğunu göstərən, onun tarixçəsini çıxardan mobil tətbiqdə Clickhouse işlətməyə dəyərmi?
Əgər birinci suala “hə”, ikinci suala isə “yox” cavabını vermisinizsə, təbrik edirəm, cavab düzdür. Çünki ikinci halda tranzaksiyalar var, Clickhouse isə transaction-based əməliyyatlar üçün uyğun deyil.
Yekun
Təcrübə göstərir ki, Software>hardware. Serverin gücünü artırmaq, ekstensiv genişlənmək, miqyaslanmaq əvəzinə düzgün alqoritm qurmaq, optimal proqram yazmaq daha effektivdir. Biz Smartbee-nin serverini daha sürətli etmək üçün N qədər pul və resurs xərcləyəcəkdik. Amma Clickhouse istifadə etməklə xeyli qabağa düşüb, resurslara qənaət etdik.
Azərbaycanda bizdən başqa Clickhouse istifadə etmiş şirkətləri, startapları tanımıram. Əgər kimsə ondan istfadə edibsə, öz təcrübəsini bölüşsün, həmkarları tanımaq çox xoş olar.