Ana içeriğe geç
Version: 1.0.1

ClickHouse

ClickHouse, Yandex.Metrica için geliştirilmiş olan, sütun tabanlı, dağıtık, paralel işlem yapabilen, yatay genişleyebilen, disk veya bellek üzerinde veri saklayan, SQL desteği olan(standart SQL ile bazı farklılıklar var) ancak gerçek güncelleme/silme ve transaction desteği olmayan bir OLAP(Online Analytical Processing), Database Management System(DBMS)’dir. Açık kaynaklı ve ücretsiz bir projedir. C++ ile geliştirilmektedir.

Data Compression

İstenen performansı elde etmek için ClickHouse veri sıkıştırmayı kullanır. Bu, genel amaçlı sıkıştırmanın yanı sıra ayrı sütunlarda depolanan farklı veri türlerini hedefleyen bir dizi özel codec bileşenini içerir.

Query processing across multiple servers

ClickHouse, farklı shardlar arasında depolanan verilerle dağıtılmış sorgu işlemeyi destekler. Büyük sorgular birden çok çekirdekte paralelleştirilir ve ihtiyaç duydukları kaynakları kullanır.

SQL query syntax

ClickHouse, ANSI SQL'e benzer SQL syntax’ı destekler. Ancak aynı değildir, bu nedenle başka bir SQL uyumlu sistemden geçiş için çeviri gerekebilir.

Vector computation engine

Veri işleme sırasında ClickHouse, sütun yığınlarıyla (vektörler olarak adlandırılır) çalışır ve işlemler, tek tek değerler yerine öğe dizileri üzerinde gerçekleştirilir.

No database locks

ClickHouse, yeni veriler eklerken lock mekanizmalarına bakmadan tabloları sürekli olarak günceller.

Primary and data skipping indices

Clickhouse, verileri fiziksel olarak primary key’e göre sıralar. Secondary indexler ("data skipping indices" olarak da adlandırılır), hangi verilerin filtreleme ölçütleriyle eşleşmediğini ve atlanması gerektiğini önceden belirtir.

Approximated calculations

Daha fazla performans artışı elde etmek için, karmaşık sorgular için, doğruluk ve performans arasında bir ödünleşim bularak veri örneği üzerinde hesaplamalar yapabilirsiniz. Bu, örneğin karmaşık veri bilimi hesaplamaları için geçerlidir.

ClickHouse birçok senaryo için mükemmel bir seçim olsa da, mimari özelliklerini akılda tutmak önemlidir. ClickHouse oldukça benzersiz olduğu için optimumun altında performansa yol açan hatalar yapmak kolaydır. Bu nedenle, bu DBMS'nin arkasında neyin durduğunu ve nasıl çalıştığını anlamak önemlidir.

En ayırt edici özelliği olan deponun sütun odaklı yapısına bakarak başlayalım.

Ne zaman ClickHouse kullanılmalı?

Doğru ve uygun senaryolarda kullanıldığında, ClickHouse rakiplerini geride bırakan güçlü, ölçeklenebilir ve hızlı bir çözümdür. ClickHouse, OLAP uygulamaları için yapılmıştır ve verileri okumak ve karmaşık istekleri yüksek hızlarda işlemek için bir dizi optimizasyon içerir.

Aşağıdaki durumlarda ClickHouse'tan en iyi şekilde yararlanırsınız:

  • Sürekli olarak yazılan ve okunan muazzam hacimlerde (terabayt cinsinden ölçülen) verilerle çalışıyorsanız
  • Çok sayıda sütuna sahip tablolarınız varsa
  • Binlerce satır üzerinden büyük yığınlar halinde veri eklemek istediğinizde
  • Verileri daha sonra değiştirmeniz gerekmediğinde
  • Transactionlara ihtiyacınız olmadığında

Örneğin Yandex, her gün gelen 25 milyon kayıtla 500'den fazla sunucu kullanıyor. ClickHouse kullanan başka bir şirket olan Bloomberg, yüzden fazla sunucuya sahiptir ve her gün yaklaşık bir trilyon yeni kayıt kabul etmektedir (2018 verileri itibariyle).

Ne zaman ClickHouse kullanılmamalı?

ClickHouse hızlı olacak şekilde tasarlanmıştır. Ancak, ClickHouse'u OLAP uygulamaları için mükemmel bir çözüm yapan optimizasyonlar, onu diğer proje türleri için yetersiz kılıyor.

OLTP için ClickHouse'u kullanmayın. ClickHouse, verilerin sabit kalmasını bekler. Büyük veri yığınlarını ClickHouse veritabanından kaldırmak teknik olarak mümkün olsa da, bu hızlı değildir. ClickHouse, veri değişiklikleri için tasarlanmamıştır. Sparse indexing nedeniyle, tekil satırları keylerle bulma ve alma konusunda da verimsizdir. Son olarak, ClickHouse ACID işlemlerini tam olarak desteklemez.

ClickHouse bir key-value DBMS'si değildir. Ayrıca bir file storage olarak tasarlanmamıştır.

Document tabanlı bir veritabanı da değildir. ClickHouse, tablo oluşturma sırasında belirtilmesi gereken önceden tanımlanmış bir şema kullanır. Şema ne kadar iyi olursa, sorgular o kadar etkili ve performanslı olur.