Мэдээ

Санах ойн хязгаар түүх болов: Polars 2.0 албан ёсоор цацагдаж, DuckDB-г ардаа орхилоо

TOGTOKHTOGTOKH·2026 оны аравдугаар сарын 6·1 үзсэн·
Санах ойн хязгаар түүх болов: Polars 2.0 албан ёсоор цацагдаж, DuckDB-г ардаа орхилоо

Өгөгдлийн инженерчлэл (Data Engineering) болон Python өгөгдлийн шинжилгээний салбарт энэ намрын хамгийн том үйл явдал тохиолоо. Rust хэл дээр бичигдсэн хурд, хүчин чадлаараа алдаршсан DataFrame сан болох Polars албан ёсоор 2.0 томоохон шинэчлэлтээ цацлаа.

Анх хөгжүүлэгчдийн баг 2.0 хувилбарыг зүгээр л хуучин системийн алдаа, өрийг цэвэрлэсэн "уйтгартай" шинэчлэлт болно хэмээн төлөвлөж байсан ч бодит байдал дээр өгөгдөл боловсруулах дүрэм журмыг үндсээр нь өөрчилсөн хүчирхэг боломжуудыг нэг дор багтаасан байна.

Эдгээрээс хөгжүүлэгч бүрийн анхаарлыг татаж буй гол өөрчлөлтүүдтэй дэлгэрэнгүй танилцъя.


1. Стрийминг хөдөлгүүр (Streaming Engine) анхдагч боллоо: 5 дахин өндөр хурд

Polars 1.x хувилбарт бүх өгөгдөл санах ойд (in-memory) бүрэн ачаалагдан боловсруулагддаг байсан тул санах ойн багтаамжаас давсан том аналитик хийхэд хүндрэлтэй байдаг байв.

Харин Polars 2.0-оос эхлэн LazyFrame дээр .collect() дуудах үед хүсэлт автоматаар Streaming Engine дээр ажилладаг боллоо. Өгөгдлийг санах ойд бүхлээр нь шахахын оронд багц (batch) хэлбэрээр цувуулан боловсруулдаг болсноор:

  • Нийт асуулгуудын гүйцэтгэл дунджаар 5 дахин хурдассан.
  • RAM зарцуулалт эрс багассан.

Анхаарах breaking change: Стрийминг хөдөлгүүр нь гүйцэтгэлийг дээд зэргээр нэмэгдүүлэхийн тулд join, group_by, unpivot зэрэг үйлдлүүдэд эгнээний анхны дарааллыг (row order) автоматаар хадгалахгүй. Хэрэв таны бизнесийн логикт эгнээний эрэмбэ зайлшгүй шаардлагатай бол тухайн үйлдлүүдэд maintain_order=True параметрийг гараар оноож өгөх шаардлагатай.


2. "Out-of-Core" буюу Spill-to-Disk идэвхжив: OOM алдаатай салах ёс

Өгөгдлийн инженер, дата сайнстист бүрийн хамгийн дургүй хар дарсан зүүд бол яах аргагүй OOM (Out Of Memory) алдаа билээ. Том өгөгдөл боловсруулах явцад серверийн RAM дүүрч, бүхэл процесс гацдаг байсан үе ард хоцорлоо.

Polars 2.0-д Out-of-Core (spill-to-disk) механизмыг анхдагчаар идэвхжүүлсэн байна. Хөдөлгүүр нь боломжит RAM-ийн 80%-д хүрэх үед санах ойноос илүү гарсан өгөгдлийг автоматаар диск рүү түр хуулж (spill) эхэлдэг болжээ (өгөгдмөл дискний төсөв нь 64 GB). Ингэснээр хөгжүүлэгч өөрийн зөөврийн компьютер эсвэл дундаж үүлэн сервер дээрээ санах ойнхоо хэмжээнээс хэд дахин том өгөгдлийг унтрах эрсдэлгүйгээр чөлөөтэй боловсруулах боломжтой болж байна.


3. Тэргүүн зэрэглэлийн SQL ба DuckDB, DataFusion-ийг хол орхисон нь

Өмнө нь Polars-ийн SQL интерфэйс нэмэлт тохиргоо төдий байсан бол одоо First-class citizen буюу үндсэн хөдөлгүүрийн зэрэгт шилжлээ.

Polars багийнхан query optimizer-тоо асар их шинэчлэл хийсэн бөгөөд үүнд:

  • Join reordering (хамгийн оновчтой холболтын дарааллыг автоматаар сонгох),
  • Dynamic predicates ба Bloom filters (шаардлагагүй өгөгдлийг сканнердахаас өмнө хаях),
  • Common subplan elimination (давхардсан тооцооллуудыг нэгтгэх) багтжээ.

Эдгээр сайжруулалтын хүчийг харуулахын тулд багийнхан аналитик ертөнцийн стандарт шалгуур болох TPC-H болон TPC-DS бенчмарк тестүүдийг явуулсан байна. Сүүлийн үеийн DuckDB (1.5.6 ба 2.0 alpha) болон Apache Arrow DataFusion 54.0.0 системүүдтэй өрсөлдөхөд Polars 2.0 нь дийлэнх асуулгад тодорхой давуу ялалт байгуулжээ.

Жишээ нь, 16 vCPU бүхий AWS машин дээр TPC-H (SF100) тестийг ажиллуулахад:

  • Polars 2.0: 34.63 секунд
  • DuckDB 1.5.6: 50.17 секунд
  • DataFusion 54.0: 78.04 секунд

Энэ нь Polars-ийг зөвхөн Python сан бус, бие даасан өндөр хурдны аналитик SQL хөдөлгүүрүүдтэй эн зэрэгцэх түвшинд ирснийг баталлаа.


4. Шинэ "Map" өгөгдлийн төрөл ба AI агентуудад ээлтэй "Strict" төрлүүд

Polars 2.0 нь хөгжүүлэлтийн чанарыг сайжруулах хэд хэдэн чухал цэвэрлэгээг хийсэн:

  1. Map Data Type: Apache Arrow-ийн MapType-ийг бүрэн дэмждэг болсноор nested, key-value хэлбэрийн клауд болон NoSQL өгөгдлүүдтэй ажиллахад дөхөм боллоо.
  2. Илүү хатуу төрлийн шалгалт (Strict dtypes): Төрөл автоматаар бүдэг бадаг хувирахыг (lossy type coercion) бүрэн зогсоосон. Жишээ нь, тэмдэгт мөрийг огноо руу cast(pl.Date) гэж хагас дутуу хөрвүүлэхэд алдаа заах ба оронд нь заавал .str.to_date() ашиглахыг шаардана.

Төслийн зохиогч Ричи Винкийн (Ritchie Vink) тайлбарласнаар, энэхүү хатуу шалгалт нь өнөө үед олноор ашиглагдаж буй AI код бичигч агентууд (Copilot, Claude гэх мэт) болон автоматжуулалтын системүүдэд алдааг маш эрт илрүүлж, зөв код богино хугацаанд гаргахад туслах зорилготой юм байна.


Хөгжүүлэгчид юуг анхаарч шилжих (Migrate) вэ?

Хэрэв та одоогийн төслөө 2.0 руу шилжүүлэх гэж байгаа бол дараах зүйлсийг хамгийн түрүүнд шалгаарай:

  • pip install --upgrade polars коммандаар татаж авна.
  • Эрэмбэ шаарддаг join болон group_by хэсгүүд дээрээ maintain_order=True нэмэх шаардлагатай эсэхээ нягтал.
  • Хэрэв санах ойд бүхлээр нь боловсруулах хуучин хэв маягийг хадгалахыг хүсвэл engine="in-memory" тохиргоог тухайн хэсэгт оноож болно.

Polars 2.0 нь аналитик өгөгдлийн сангийн хувьслыг шинэ түвшинд аваачиж, нэг компьютер дээр том өгөгдөлтэй ажиллах хил хязгаарыг улам бүр тэлж байна.


Эх сурвалж: Polars Official Blog: Release of Polars 2.0

Сэтгэгдэл

Ачаалж байна...