چطور ClickHouse روی 100 میلیون رکورد Query اجرا میکند، بدون اینکه 100 میلیون رکورد را بخواند؟
وقتی صحبت از Performance در سیستمهای تحلیلی میشود، معمولاً ذهنمان میرود سمت:
• CPU
• RAM
• سرعت Disk
اما در ClickHouse یک سؤال مهمتر وجود دارد:
چقدر از داده واقعاً لازم است خوانده شود؟
فرض کنید Query فقط به اطلاعات 24 ساعت اخیر و چند Column مشخص نیاز دارد.
و ClickHouse قرار نیست کل داده را بخواند و بعد دنبال رکوردهای موردنظر بگردد.
در این فرآیند:
• ابتدا Partitionهای نامرتبط حذف میشوند.
• سپس Partهای غیرضروری کنار گذاشته میشوند.
• با Data Skipping و Metadata، بخشهایی که احتمالاً هیچ Matchای ندارند Skip میشوند.
• به دلیل Columnar Storage، فقط Columnهای موردنیاز خوانده میشوند.
• و Compression حجم I/O را کاهش میدهد.
• در نهایت Vectorized Execution دادهها را بهصورت Batch پردازش میکند.
مسیر اجرای Query میتواند چیزی شبیه این باشد:
100M Records → Pruning → Data Skipping → Required Columns → Execution → Result
@BIMining
Post #1312
633

- ❤ 9
- 👍 7
- 🔥 1