# XComs और उनकी सीमाएँ — Apache Airflow: Data Pipelines का Orchestration

Source: https://www.geekswithgeeks.com/hi/airflow/data-xcom

> XComs छोटे metadata के लिए उपयोग करें और बड़ा डेटा बाहरी storage से भेजें।

## Payload नहीं, संकेतक भेजें

**XCom** ("cross-communication") metadata database में रखा छोटा मान है जो एक task से दूसरे को दिया जाता है: file path, row count, ID। यह DataFrames या files जैसे बड़े डेटा के लिए **नहीं** है: इससे database फूलता है और scheduler धीमा होता है। बड़े डेटा के लिए उसे object storage (S3, GCS) या warehouse table में लिखें, और XCom से सिर्फ़ **स्थान** भेजें। TaskFlow return values के लिए यह plumbing अपने आप करता है; classic operators के साथ `ti.xcom_push` / `ti.xcom_pull` उपयोग करें।

## छोटे मान, बड़े विचार

Tasks छोटे मान XComs से साझा करते हैं, तारीख़ों व parameters के लिए templates उपयोग करते हैं और secrets connections से पढ़ते हैं।

![तीन साधन: XCom, templates, connections।](assets/figures/airflow/section-3-map.svg) — चित्र 3.1 — XCom, templates और connections।

## डेटा नहीं, स्थान भेजें

पहला task बड़ी फ़ाइल लिखता है और सिर्फ़ उसका path लौटाता है; दूसरा task path पाता है। (उदाहरण; `write_parquet` और `read_parquet` आपके अपने कोड के प्रतीक हैं।)

```python
@task
def extract(ds=None) -> str:
    path = f"s3://lake/orders/dt={ds}/raw.parquet"
    write_parquet(fetch_orders(ds), path)      # big data goes to storage
    return path                                 # only a short string goes to XCom

@task
def transform(path: str) -> str:
    df = read_parquet(path)
    out = path.replace("raw", "clean")
    write_parquet(clean(df), out)
    return out
```

## XCom का आकार देखें

UI पन्ने धीमे हों या metadata database बढ़ रहा हो तो बड़े XCom मान जाँचें। अंगूठा-नियम के रूप में हर एक को कुछ kilobytes से कम रखें।

**Quiz:** 2 GB के dataset के लिए XCom से क्या भेजना चाहिए?

- [ ] कुछ नहीं, XCom वर्जित है
- [ ] पूरा dataset
- [x] सिर्फ़ उसका storage स्थान
- [ ] एक screenshot

*Answer:* सिर्फ़ उसका storage स्थान. XCom छोटे metadata के लिए है; बड़ा डेटा बाहरी storage में होना चाहिए।
