# Polars 2.0: яагаад нэгтгэлүүд мөрийн дарааллыг хадгалахаа больсон бэ

Published: 2026-10-08

Polars 2.0 нь анхдагчаар стриминг хөдөлгүүр дээр "collect" функцийг ажиллуулдаг. Нэгтгэх (join), бүлэглэх (group\_by) болон unpivot үйлдлүүдийн хувьд, хэрэв та maintain\_order эсвэл sort-ийг тодорхой заагаагүй бол мөрийн дарааллыг баталгаажуулахаа больсон. Polars 2.0.0 дээр бидний ажиллуулсан 2,000,000 мөрийн дотоод нэгтгэл (inner join) нь анхдагчаар мөрүүдийг оролтын дарааллаас гадуур буцааж, maintain\_order-ийг тохируулсан үед дарааллыг хадгалсан. Мөн энэ хувилбар нь out-of-core spilling-ийг асааж, гүйцэтгэлийн үнэлгээний (benchmark) нэхэмжлэлийг худалдааны компанийн өөрийн болгосон.

Canonical: https://thedailydiff.dev/mn/video/polars-2-row-order/

## Энэ видео юуг хамардаг

- Lazy query дээр collect() дуудах нь одоо анхдагчаар стриминг хөдөлгүүрийг ашигладаг бөгөөд энэ нь join, group\_by болон unpivot-ийн хувьд мөрийн дарааллыг баталгаажуулдаггүй.
- Шилжүүлгийн гарын авлагад дараалал нь 2.0-оос өмнөх дараалал биш бөгөөд баталгаагүй гэж дурдсан; хэрэв та үүнд найдаж байгаа бол тодорхой эрэмбэлэх (sort) функцийг ашиглахыг зөвлөж байна.
- Бидний ажиллуулсан туршилтаар, анхдагч дотоод нэгтгэл (inner join) оролтын дарааллыг True буцаагаагүй; харин нэгтгэл дээр maintain\_order="left\_right" тохируулгатай үед True буцаасан. Нэг машин, нэг ажиллагаа, нэг нэгтгэлийн хэлбэр.
- Out-of-core spilling нь анхдагчаар идэвхжсэн байдаг: энэ нь RAM-ийн ойролцоогоор 80%-иас эхэлж диск рүү мэдээлэл хадгалдаг, анхдагч 64 GB дискний хязгаартай. Out-of-core join болон group\_by нь хөгжүүлэлтийн төлөвлөгөөнд байна.
- collect\_schema() нь ямар нэгэн өгөгдөл уншигдахаас өмнө алга болсон баганыг илрүүлдэг боловч, нэг утга дээр амжилтгүй болсон cast нь зөвхөн collect() үед л алдааг илрүүлдэг.
- TPC-H болон TPC-DS-ийн харьцуулалт нь худалдааны компанийн өөрийн гаргаж авсан өгөгдөл дээр хийсэн туршилт бөгөөд тайлбар хэсэгт үр дүн нь албан ёсны гүйцэтгэлийн үнэлгээнүүдтэй харьцуулах боломжгүй гэж заасан.

## Бүлгүүд

- 0:00 Анхдагч дараалал яагаад өөрчлөгдсөн бэ?
- 0:56 Шилжүүлгийн гарын авлага юу амлаж байна вэ?
- 1:17 Гүйцэтгэлийн үнэлгээ шударга байна уу?
- 1:41 Бид үүнийг ажиллуулах үед юу хардаг вэ?
- 1:56 Хатуу байх нь эрт байх гэсэн үг үү?
- 2:07 Би хуучин дарааллыг яаж буцааж авах вэ?
- 2:20 Дүгнэлт юу вэ?

## Орчуулсан бичлэг

Англи хэл дээрх эх хувилбараас орчуулсан. Боломжтой дуу болон хадмал орчуулгыг YouTube хянадаг.

### Анхдагч дараалал яагаад өөрчлөгдсөн бэ?

0:00 Та нэгтгэл таны мөрүүдийг таны бичсэн дарааллаар буцааж өгнө гэж боддог. Polars 2.0 нь анхдагчаар, зориуд, үүнийг амлахаа больсон. Энэ видеонд: анхдагч тохиргоо яагаад өөрчлөгдсөн бэ? Энэ нь юуг авчирсан бэ? Мөн таны аль скрипт хамгийн түрүүнд эвдрэх вэ? Энэ бол The Daily Diff, дотоод талаас нь. Polars бол нээлттэй эхийн DataFrame сан: Python-оос дууддаг хүснэгтийн хөдөлгүүр,

0:20 үүний үндсэн код нь Rust хэлээр бичигдсэн. Энэ нь MIT лицензийн дор үнэ төлбөргүй бөгөөд та үүнийг pip install polars ашиглан суулгадаг. Эхлээд нэг жижиг зүйл. Хуучин дарааллыг буцааж авчирдаг шилжүүлэг нь нэгтгэлийн (join) өөрийнх нь аргумент юм. Би үүнд эцэст нь эргэж ирнэ. 2.0 хувилбараас хойш collect нь стриминг хөдөлгүүрийг анхдагчаар ажиллуулдаг. Стриминг нь query-г зэрэгцээ ажиллах хэсгүүдэд хуваадаг, мөн хэсгүүд ажиллаж дуусах үедээ дуусдаг.

0:42 Нэгтгэл (join), бүлэглэх (group by) болон unpivot-ийн хувьд энэ хувилбар нь дарааллыг амладаггүй. Хэн хамгийн түрүүнд өртөх вэ? Гаралтыг хадгалсан файлтай, мөрөөр мөрөөр харьцуулдаг хэн бүхэн. Тэр тест таны лаптоп дээр амжилттай болж, өөр машинд амжилтгүй болж болно. Дараа нь, шилжүүлгийн гарын авлага.

### Шилжүүлгийн гарын авлага юу амлаж байна вэ?

0:57 Энэ нь дээр үзүүлсэн яг таг мөрийн дараалал баталгаагүй гэж заасан. Тиймээс, хэрэв та дараалалд найдаж байгаа бол тодорхой эрэмбэлнэ үү. Out-of-core нь бас анхдагчаар идэвхжсэн. Энэ нь RAM-ийн ойролцоогоор ная орчим хувьд хүрэхэд диск рүү мэдээлэл хадгалж эхэлдэг, жаран дөрвөн гигабайтын хязгаартай. Эрэмбэлэх (sort), цонхны функц (window functions) болон олон илэрхийлэлүүд одоо диск рүү хадгалах боломжтой. Нэгтгэлүүд (joins) болон бүлэглэлтүүд (group-bys) удахгүй нэмэгдэх болно.

### Гүйцэтгэлийн үнэлгээ шударга байна уу?

1:17 Polars нь DataFusion болон DuckDB-г TPC-H болон TPC-DS гүйцэтгэлийн үнэлгээнүүд дээр ялдаг гэж мэдэгддэг. Тоо баримтууд нь тэдний өөрсдийн ажиллуулсан, гаргаж авсан өгөгдөл дээрээс авсан, мөн тэдний тайлбар хэсэгт албан ёсны үр дүнгүүдтэй харьцуулах боломжгүй гэж заасан. Тэдний өөрсдийн тоо баримтууд нь Polars нь TPC-H дээр арван зургаагаас нэг зуун ерэн хоёр цөм рүү шилжихэд ойролцоогоор гурав цэг найман дахин хурдан болдог гэж заасан. Тэд мөн том машины нэмэлт thread-үүд нь жижиг query-г удаашруулдаг гэж хэлсэн.

### Бид үүнийг ажиллуулах үед юу хардаг вэ?

1:41 Бид Polars 2.0.0 дээр ижил нэгтгэлийг хоёр удаа ажиллуулсан. Анхдагч ажиллагаа нь мөрүүдийг хутгасан. Тугийг ашиглахад оролтын дараалал хадгалагдсан. Тестэнд мэдээлэл өгдөг нэгтгэлүүдийг олоорой. Дараа нь эрэмбэлэхгүйгээр хийгдсэн аливаа нэгтгэл нь таны хэзээ ч хийгээгүй мөрийн дарааллын шийдвэр юм. Polars 2.0 нь төрлүүдийн хувьд илүү хатуу болсон.

### Хатуу байх нь эрт байх гэсэн үг үү?

1:58 Схем шалгалт нь ямар нэгэн өгөгдөл уншигдахаас өмнө алга болсон баганыг илрүүлдэг. Энэ нь нэг мөр дээр амжилтгүй болсон cast-ийг илрүүлж чадахгүй, учир нь тэр алдаа нь өгөгдлийг хүлээдэг. Одоо миний нээсэн гогцоо.

### Би хуучин дарааллыг яаж буцааж авах вэ?

2:08 Шилжүүлэг нь нэгтгэл дээр байрладаг. Нэгтгэл дээр maintain\_order-ийг тохируулах, эсвэл дараа нь эрэмбэлэх (sort) функцийг нэмэх. Удирдамж нь эрэмбэлэх функцийг санал болгож байна. Нэгтгэлийн туг нь бидний ажиллуулсан туршилтаар дарааллыг хадгалсан, зүүн талын дарааллыг зүүн, баруун гэж хадгалсан. Дүгнэлт, дотоод талаас нь: хянах шаардлагатай.

### Дүгнэлт юу вэ?

2:22 Би шинэчлэхээс өмнө бүх нэгтгэлийг хянаж үзэх байсан. Энэ талаар асуулт байна уу? Сэтгэгдэл хэсэгт үлдээгээрэй. Тэгээд энэ өдрийн ялгаа энэ байна. Би Axrisi-аас Нико байна. Хариуцлагатай нэгтгэхийг хүсье.

## Эх сурвалжууд

- [Release of Polars 2.0](https://pola.rs/posts/release-polars-2/) — Polars (pola.rs)
- [Polars 2.0 upgrade guide](https://docs.pola.rs/releases/upgrade/2/) — Polars documentation
- [Polars homepage](https://pola.rs/) — Polars (pola.rs)
- [polars-2.0-benchmark repository](https://github.com/pola-rs/polars-2.0-benchmark) — Polars on GitHub
- [Release of Polars 2.0 (Hacker News discussion)](https://news.ycombinator.com/item?id=49977177) — Hacker News
