1. ClickHouse qachon yetarli boʼlmay qoladi
ClickHouse — single-table scan va agregatsiyalar uchun ajoyib dvigatel: kolonchali saqlash, vektorizatsiyalangan bajarish, oddiy soʼrovlarda taʼsirchan tezlik. Yandexda yaratilgan u log-analitika va metrikalar standarti boʼldi.
Lekin vazifalar murakkablashganda — alternativlar izlashga majburlagan muammolar paydo boʼladi:
- JOIN-unumdorlik: ClickHouse multi-table JOIN da tarixiy jihatdan zaif. Yaqinda gacha toʼliq CBO yoʼq edi.
- Real-time updates: ReplacingMergeTree fondagi merge orqali eventual deduplikatsiya taʼminlaydi. Haqiqiy UPSERT yoʼq, partial update yoʼq.
- Deduplikatsiya: FINAL kalit soʼzi ReplacingMergeTree da oʼqish unumdorligini yoʼq qiladi — on-the-fly merge ishga tushiradi.
- SQL-toʼliqlik: TPC-DS soʼrovlarining ~50% bajarilmaydi — correlated subqueries, murakkab CTE qoʼllab-quvvatlanmaydi.
- Operatsion murakkablik: ClickHouse Keeper/ZooKeeper orqali qoʼlda shardlash, maʼlumotlarni avtomatik rebalansing yoʼq.
2. Arxitektura: append-only dvigatel vs unified lakehouse
Asosiy farq — yangilanishlarni qayta ishlash va klasterni boshqarish modelida.
| ClickHouse | Apache Doris |
|---|---|
| MergeTree family — fondagi merge bilan append-only | Columnar MPP, FE+BE arxitekturasi avtobalanslanish bilan |
| ClickHouse Keeper / ZooKeeper orqali qoʼlda shardlash | MySQL-protokol — adaptersiz JDBC/ODBC ulanish |
| Oʼz SQL-dialekti (MySQL/PostgreSQL bilan mos emas) | Unique Key (real-time UPSERT) + Aggregate Key + Duplicate Key |
| Nativ UPSERT yoʼq — faqat ReplacingMergeTree + FINAL | Vectorized engine + CBO + Runtime Filter JOIN uchun |
| Distributed jadvallar qoʼlda sozlashni talab qiladi | Shardlar va replikalarni avtomatik boshqarish |
Apache Doris dastlab maʼlumotlar real-time yangilanadigan ssenariylar uchun loyihalangan. Uchta kalit modeli (Unique, Aggregate, Duplicate) har bir jadval uchun optimal strategiyani tanlash imkonini beradi.
3. Unumdorlik: benchmarklar
VeloDB Engineering va Apache Doris eʼlon qilgan benchmarklardan maʼlumotlar:
| Benchmark | ClickHouse | Apache Doris | Manba |
|---|---|---|---|
| TPC-H SF100 | Boshlangʼich daraja | 3x tezroq | VeloDB Engineering |
| TPC-DS (99 soʼrov) | ~50% soʼrov fail | 99/99 soʼrov | VeloDB Engineering |
| SSB + 25% updates | Boshlangʼich daraja | 5–34x tezroq | VeloDB Engineering |
| ClickBench (single-table) | Teng | Teng | ClickBench.com |
| CoffeeBench (real-world) | Boshlangʼich daraja | 8x tezroq, 8x arzonroq | VeloDB Engineering |
| Write throughput (updates) | ReplacingMergeTree + FINAL | Delete Bitmap — barqaror tezroq | VeloDB Engineering |
4. SQL: standart vs dialekt
ClickHouse MySQL va PostgreSQL bilan mos boʼlmagan oʼz SQL-dialektidan foydalanadi. BI-asboblarni ulash maxsus adapterlarni talab qiladi. Correlated subqueries, baʼzi window functions, murakkab CTE qoʼllab-quvvatlanmaydi.
Apache Doris MySQL-protokol boʼyicha ishlaydi. Har qanday BI-asbob (Grafana, Superset, Tableau, Power BI) standart JDBC/ODBC orqali adaptersiz ulanadi. Toʼliq TPC-DS SQL qoʼllab-quvvatlanadi.
// MISOL: MULTI-TABLE JOIN + WINDOW FUNCTION SELECT department, employee,
SUM(revenue) AS total,
RANK() OVER (PARTITION BY department ORDER BY SUM(revenue) DESC) AS rnk
FROM sales s
JOIN employees e ON s.emp_id = e.id
WHERE sale_date >= '2026-01-01' GROUP BY department, employee; Bu JOIN va RANK() OVER bilan soʼrov Doris da tayyor ishlaydi. ClickHouse da correlated subqueries va baʼzi window functions qayta yozishni talab qilishi mumkin.
5. Real-time updates: Delete Bitmap vs ReplacingMergeTree
ClickHouse ReplacingMergeTree: maʼlumotlar faqat fondagi merge paytida deduplikatsiya qilinadi. Merge gacha soʼrovlar dublikatlarni qaytaradi. FINAL kalit soʼzi oʼqish paytida merge ishga tushiradi — unumdorlikni yoʼq qiladi.
Apache Doris Unique Key + Delete Bitmap: yangilanishlar yozilgandan keyin darhol koʼrinadi. Partial column update qoʼllab-quvvatlanadi. FINAL kerak emas — maʼlumotlar har bir oʼqishda izchil.
25% yangilanishli SSB benchmarkida Apache Doris ClickHouse dan 5–34 barobar tezroq natija koʼrsatdi — batafsil «34x faster real-time updates» maqolasida.
CDC-integratsiya: Flink CDC → Doris nativ ishlaydi. ClickHouse da oʼxshash pipeline Kafka + materialized views + ReplacingMergeTree talab qiladi — sozlash va qoʼllab-quvvatlash ancha murakkab.
6. Egalik qilish narxi (TCO)
TCO taqqoslashdagi asosiy omillar:
| Litsenziyalar | |
|---|---|
| Litsenziyalar | Ikkala loyiha ham — Apache License 2.0. Litsenziya toʼlovlari yoʼq. |
| Infratuzilma | ClickHouse: qoʼlda shardlash, ClickHouse Keeper, qoʼlda rebalansing. Doris: shardlar va replikalarni avtomatik boshqarish — ops-ish kamroq. |
| Muhandislar | ClickHouse maxsus tajriba talab qiladi: merge siyosatlari, shardlash, FINAL. Doris MySQL-mos — mutaxassislar puli kengroq. |
| Saqlash | Siqish teng (ikkalasi ham kolonchali). Lekin Doris merge gacha ReplacingMergeTree ga xos maʼlumotlar dublikatlanishini oldini oladi. |
| Ekotizim | ClickHouse community katta, lekin tooling parchalangan. Doris har qanday MySQL-mos asbobga ulanadi — universal BI-ekotizim. |
7. ClickHouse dan koʼchish keyslari
Kwai / Bleem (trillionlab reklama qatorlari)
ClickHouse + Elasticsearch ni bitta Apache Doris ga birlashtirish (Bleem platformasi). Natija: kuniga ~1 mlrd soʼrov, arxitektura soddalashishi.
Enterprise-kompaniyalar (ommaviy keyslar)
doris.apache.org da koʼplab enterprise-keyslar: fintech, riteyler, telekom. Koʼchishning tipik sababi — bitta tizimda JOIN + real-time updates zaruriyati.
Koʼchish yondashuvi
SQL asosan mos. Asosiy oʼzgarishlar: jadval dvigatellarini mapping (MergeTree → Duplicate Key, ReplacingMergeTree → Unique Key, AggregatingMergeTree → Aggregate Key).
8. ClickHouse qachon yaxshiroq
ClickHouse aniq stsenariylarda ajoyib tanlov boʼlib qoladi:
- Append-only maʼlumotlardagi sof single-table agregatsiyalar: loglar, metrikalar, time-series yangilanishsiz.
- Multi-table JOIN yoki real-time updates zaruriyati yoʼq.
- Materialized views deduplikatsiyani hal qilayotgan mavjud klaster.
- ClickHouse da chuqur tajribaga ega va tizimlarni birlashtirish rejasi yoʼq jamoa.
Lekin: JOIN + updates + SQL-toʼliqlik kerak boʼlsa → Doris gʼolib chiqadi.