در بلاگ جدیدم رفتم سراغ بررسی عملی پردازش ۱۰ گیگابایت داده روی لپتاپ شخصی با DuckDB و تجربههای کلیدی پردازش دادههای بزرگ بدون نیاز به کلود یا سرورهای گرانقیمت را نوشتم.
در نهایت ۳۰ میلیون سطر داده متنی (حدود ۱۰.۵ گیگابایت) فقط در ۸۸ ثانیه وارد یک فایل ۲.۶۷ گیگابایتی DuckDB شد و زمان کوئریها از ۲.۱ ثانیه به ۰.۰۳ ثانیه رسید (۷۰ برابر سریعتر).
البته باید حدود ۵۰ گیگ دیتای دیگه هم بهش اضافه بشه. ولی با این حال، سرعت موقع کوئری در حد میلی ثانیه ست.
چند نکته بسیار مهم از این تجربه عملی:
- قبل از شروع بارگذاری، بایتهای فایل را چک کنید. خطاهای کدگذاری مثل CP1252 و کاراکترهای غیر استاندارد میتوانند همان اول کار پردازش را خراب کنند.
- الگوی all_varchar = true: ابتدا تمام ستونها را متنی بخوانید و سپس درون خود SQL نوع دادهها را تبدیل کنید. این کار مانع از تبدیل بیصدا و اشتباه دادهها به NULL میشود و صفرهای ابتدای کدها را حفظ میکند.
- در جداول تحلیلی از Primary Key استفاده نکنید. تعریف کلید اصلی باعث ساخت ایندکسهای سنگین میشود که سرعت بارگذاری را ۱۷ برابر کندتر و حجم فایل را ۵.۶ برابر بزرگتر میکند.
- مدیریت حافظه: با تنظیم preserve_insertion_order = false حافظه مصرفی بهشدت کاهش پیدا میکند و DuckDB حتی با محدودیت شدید حافظه (۱ گیگابایت رم) دادهها را بدون افت سرعت روی دیسک مدیریت میکند.
متن کامل مقاله:
http://mlnotes.substack.com
@DevTwitter | <Mehdi Allahyari/>
Post #12785
5.92K
- 👍 16
- 🍌 9
- ❤ 1