فشردهسازیِ TimescaleDB تا ۹۸ درصد
خلاصهٔ کاملتر
این مقاله (نوشتهی Aleksander Roszig) توضیح میده که TimescaleDB میتونه دادههای سریزمانیِ معمول رو تا ۹۸٪ فشرده کنه، و این کار رو موتوری به اسمِ hypercore انجام میده — یه موتورِ ترکیبیِ ردیفی-ستونی.
نویسنده اول تفاوتش با TOAST پستگرس رو روشن میکنه: TOAST برای تکمقدارهای بزرگ (مثلِ رشتههای طولانی، jsonb، bytea) ساخته شده، ولی TimescaleDB الگوهای بینِ ردیفها توی دادههای زمانی رو بهینه میکنه. این دو مکمل همان نه رقیب؛ برای ستونهایی مثلِ floatهای سنسور و timestamp که TOAST اصلاً فشرده نمیکنه، TimescaleDB به نسبتِ ۱۰ تا ۱۰۰ برابر میرسه.
منطقِ hypercore اینه که دادهی جدید تو chunkهای ردیفیِ پستگرس میشینه (INSERT و UPDATE سریع)، ولی chunkهای قدیمیتر خودکار به فرمتِ ستونیِ فشرده تبدیل میشن. موقعِ تبدیل، ردیفها تو دستههای تا ۱۰۰۰تایی گروه میشن و هر دسته به یک ردیف تو جدولِ فشرده تبدیل میشه که ستونهاش آرایهان. چون داده ستونی چیده میشه، کوئری فقط بایتهای لازم رو میخونه و سریعتر میشه.
الگوریتمهاش هم مخصوصِ ساختارِ دادهان: delta encoding فقط میزانِ تغییرِ هر مقدار نسبت به قبلی رو ذخیره میکنه؛ delta-of-delta وقتی بازه ثابته (مثلاً هر ۵ ثانیه) اختلافِ اختلافها صفر میشه و با چند بیت ذخیره میشه؛ و کدگذاریِ Gorilla XOR و run-length برای مقادیرِ تکراری. نویسنده اشاره میکنه که برای ستونهای پرآنتروپی مثلِ UUIDِ یکتا، دیکشنری فایدهای نداره و TimescaleDB خودش این حالت رو تشخیص میده و ازش استفاده نمیکنه.
به گفتهی نویسنده، مهمترین کاری که باید عمداً انجام بدی انتخابِ درستِ دو پارامتره: segmentby ستونیه که تو کلِ یه دسته مشترکه (مثلِ machine_id) و یهبار ذخیره میشه، و planner ازش برای ردکردنِ کلِ دستههایی که با WHERE نمیخونن استفاده میکنه؛ و orderby ترتیبِ مرتبسازیِ داخلِ دستهست (معمولاً time DESC) که به delta و delta-of-delta بیشترین بهره رو میده. تنظیمش اینشکلیه:
ALTER TABLE iot_sensor_data SET (
timescaledb.orderby = 'time DESC',
timescaledb.segmentby = 'machine_id'
);نکات کلیدی:
- hypercore دادههای سریزمانی رو تا ۹۸٪ فشرده میکنه با تبدیلِ chunkهای قدیمی به فرمتِ ستونی
- برخلاف TOAST که تکمقدارهای بزرگ رو هدف میگیره، hypercore الگوهای بینِ ردیفها رو فشرده میکنه
- ردیفها تو دستههای تا ۱۰۰۰تایی گروه میشن و هر دسته یه ردیفِ ستونی با آرایه میشه
- الگوریتمها مخصوصِ ساختارِ دادهان: delta، delta-of-delta، Gorilla XOR و run-length
- دو پارامترِ segmentby و orderby مهمترین تنظیماتن و باید عمداً انتخاب بشن




