Apache Ecosystem

گشودن پتانسیل‌های Apache Iceberg: رویکردی مدرن به معماری Data Lakehouse

برای سال‌ها، جامعه مهندسی داده با ملاحظات و تعادل‌های میان انبار داده و دریاچه داده دست‌وپنج نرم کرده است. انبارهای داده عملکرد پرس‌وجوی ساختاریافته ارائه می‌دادند اما انعطاف‌پذیری کمی داشتند، در حالی که دریاچه‌های داده مقیاس‌پذیری و صرفه‌جویی هزینه عظیمی داشتند اما با مشکلاتی مانند عدم قابلیت اطمینان، به‌ویژه در زمینه تغییرات طرح و سازگاری، روبرو بودند. در اینجا Apache Iceberg وارد میدان می‌شود؛ یک قالب جدول باز که برای حل این مشکلات طراحی شده است و قدرت یک پایگاه داده رابطه‌ای را به مقیاس عظیم ذخیره‌سازی ابری می‌آورد.

فلسفه اصلی: داده‌های متا به جای داده‌ها

برخلاف قالب‌های فایل سنتی مانند CSV یا Parquet که ساختار در خود فایل‌ها تعبیه شده است، Apache Iceberg داده‌های متا را از داده‌ها جدا می‌کند. این سیستم داده‌های متای جدول را در یک قالب متمرکز و بهینه‌شده (معمولاً JSON یا Protobuf) در داخل ذخیره‌سازی اشیایی (مانند S3، GCS یا Azure Blob Storage) ذخیره می‌کند. این جداسازی به Iceberg اجازه می‌دهد تا از ویژگی‌های پیشرفته‌ای مانند سفر در زمان، تکامل طرح و پردازش افزایشی پشتیبانی کند، بدون اینکه نیاز به بازنویسی پرهزینه داده‌ها باشد.

تکامل طرح به سادگی

یکی از رایج‌ترین نقاط درد در مهندسی داده، مدیریت طرح‌های در حال تغییر است. در پیکربندی‌های سنتی، افزودن یک ستون ممکن است نیاز به بازنویسی کل جدول داشته باشد یا با خطر شکست پرس‌وجوها مواجه شود. Iceberg به شما اجازه می‌دهد ستون‌ها را به صورت پویا اضافه، حذف یا تغییر نام دهید. نکته کلیدی در اینجا سازگاری با نسخه‌های قبلی است؛ پرس‌وجوهای قدیمی همچنان با استفاده از تصویر لحظه‌ای (Snapshot) قبلی طرح کار می‌کنند.

دستور زیر را در نظر بگیرید که یک ستون جدید به یک جدول Iceberg موجود اضافه می‌کند:

ALTER TABLE sales ADD COLUMN customer_segment STRING;

این عملیات آنی است زیرا تنها فایل‌های داده‌های متا را به‌روز می‌کند. فایل‌های داده Parquet زیرین تا زمانی که داده‌های جدید با طرح جدید نوشته شوند، دست‌نخورده باقی می‌مانند که این امر باعث عدم توقف سرویس و حداقل هزینه ذخیره‌سازی می‌شود.

سفر در زمان: پرس‌وجو از گذشته

سفر در زمان شاید شهودی‌ترین مزیت Iceberg باشد. از آنجا که هر تراکنش یک شناسه تصویر لحظه‌ای (Snapshot ID) جدید ایجاد می‌کند، شما می‌توانید داده‌های خود را همان‌طور که در هر نقطه از زمان وجود داشتند، پرس‌وجو کنید. این ویژگی برای عیب‌یابی مشکلات کیفیت داده، رعایت الزامات حسابرسی یا انجام تحلیل‌های لحظه‌ای بی‌نظیر است.

شما می‌توانید یک تصویر لحظه‌ای خاص را با استفاده از شناسه یا یک مهر زمانی (Timestamp) پرس‌وجو کنید. برای مثال:

-- پرس‌وجو از جدول همان‌طور که 24 ساعت پیش بود
SELECT * FROM sales TIMESTAMP AS OF '2023-10-27 10:00:00';

این ویژگی نیاز به نگهداری جداول «پشتیبان» جداگانه برای داده‌های تاریخی را حذف می‌کند و به طور قابل توجهی هزینه‌های ذخیره‌سازی و پیچیدگی عملیاتی را کاهش می‌دهد.

پارتیشن‌بندی و رد کردن داده‌ها

پارتیشن‌بندی کارآمد برای عملکرد حیاتی است. Iceberg از پارتیشن‌بندی هم ایستا و هم پویا پشتیبانی می‌کند. برخلاف پارتیشن‌بندی سبک Hive که می‌تواند منجر به «مشکل فایل‌های کوچک» و ساختارهای دایرکتوری افراطی شود، Iceberg پارتیشن‌ها را در داده‌های متا ردیابی می‌کند. این امر امکان رد کردن پیشرفته داده‌ها را فراهم می‌کند، جایی که پرس‌وجوها تنها داده‌های متا را اسکن می‌کنند تا تعیین کنند کدام فایل‌ها حاوی داده‌های مرتبط هستند و فایل‌های کاملی که با شرایط فیلتر مطابقت ندارند را نادیده می‌گیرند.

علاوه بر این، Iceberg از مرتب‌سازی Z-ordering و خوشه‌بندی پشتیبانی می‌کند که به بهینه‌سازی پرس‌وجوها روی ستون‌های غیر پارتیشن‌بندی شده با هم‌مکان‌سازی فیزیکی داده‌های مرتبط کمک می‌کند.

بهینه‌سازی پرس‌وجو و عملکرد Lakehouse

Apache Iceberg مستقل از موتور است، به این معنی که به طور یکپارچه با Apache Spark، Trino، Flink و Presto کار می‌کند. این انعطاف‌پذیری به سازمان‌ها اجازه می‌دهد تا یک معماری «Lakehouse» را اتخاذ کنند، جایی که یک نسخه واحد از داده‌ها هم برای بارهای کاری دسته‌ای (Batch) و هم برای جریان داده (Streaming) با عملکرد بالا استفاده می‌شود. با بهره‌گیری از داده‌های متا برای آمار و رد کردن داده‌ها، Iceberg به موتورهای SQL اجازه می‌دهد تا تجمیعات و پیوندهای (Joins) پیچیده را با کارایی قابل مقایسه با انبارهای داده سنتی انجام دهند.

نتیجه‌گیری

Apache Iceberg نمایانگر یک جهش بزرگ در فناوری دریاچه داده است. با جداسازی داده‌های متا از داده‌ها، این سیستم انعطاف‌پذیری یک دریاچه را با عملکرد و قابلیت اطمینان یک انبار داده ارائه می‌دهد. برای توسعه‌دهندگانی که به دنبال مدرن‌سازی مجموعه داده‌های خود هستند، تسلط بر Iceberg نه تنها یک گزینه، بلکه یک ضرورت است. چه با تکامل‌های پیچیده طرح سروکار داشته باشید و چه به ردیابی‌های حسابرسی تاریخی نیاز داشته باشید، Iceberg یک راه‌حل قدرتمند و متن‌باز ارائه می‌دهد که با نیازهای داده‌ای شما مقیاس می‌پذیرد.

Share: