MongoDB Academy · Ders

Kaynaklar Arası Toplulaştırma İşlem Hatlarını Çalıştırma

Öğrenenler, Atlas koleksiyonu verilerini S3'te saklanan JSON veya Parquet dosyalarıyla tek bir sorguda birleştiren toplulaştırma işlem hatları yazacaklardır.

3. ders / 413 adım

Kaynaklar Arası Toplulaştırma İşlem Hatlarını Çalıştırma, CoddyKit'te ücretsiz bir MongoDB Academy dersidir. Bu, 4 dersinin 3. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, MongoDB Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. MongoDB Academy kursu toplamda 4 dersten oluşur.

Kaynaklar Arası İşlem Hatlarını Özel Kılan Nedir?

Atlas Data Federation'daki kaynaklar arası toplama işlem hattı, MongoDB'den bildiğiniz aynı toplama aşamalarını çalıştırır; ancak her aşamadaki veriler farklı fiziksel sistemlerden — bir S3 depolama alanından, canlı bir Atlas kümesinden veya her ikisinden — gelebilir. Federasyon sorgu altyapısı tüm yönlendirme, çoğaltarak gönderme ve sonuç birleştirme işlemlerini şeffaf biçimde yönetir. Uygulamanız açısından bu, tek bir MongoDB koleksiyonu sorgusu gibi görünür.

Basit Kaynaklar Arası Find

En basit kaynaklar arası sorgu, S3 dosyalarıyla desteklenen bir sanal koleksiyonda yapılan find() sorgusudur. Sorgu altyapısı dosyaları okur, ayrıştırır ve filtreyi uygular. Filtreden yol içindeki bölüm öznitelikleriyle eşleşen alanlar, dosyaların otomatik olarak budanmasını sağlar. Bölüm öznitelikleriyle eşleşmeyen alanlar, okuma sonrasında uygulanan filtre olarak değerlendirilir.

// Virtual collection 'events' backed by S3 JSON files
// Path: /data/events/{year int}/{month int}/*.json

// This query prunes to /data/events/2025/1/ only
const jan2025 = await db.collection('events').find({
  year: 2025,
  month: 1,
  eventType: 'purchase'   // post-read filter (not a partition attr)
}).toArray()

S3 Verilerini Canlı Koleksiyon Gibi Toplama

S3 destekli sanal koleksiyonlarda herhangi bir toplama aşamasını çalıştırabilirsiniz: $match, $group, $project, $sort, $limit. Sorgu altyapısı mümkün olduğunda aşamaları aşağıya iter (özellikle bölüm budama ve Parquet'te sütun budama için $match) ve kalan aşamaları verileri okuduktan sonra kendi hesaplama katmanında yürütür.

// Group S3-archived events by region and count
const summary = await db.collection('events_2024').aggregate([
  { $match: { year: 2024, month: { $in: [10, 11, 12] } } },  // pruning
  { $group: { _id: '$region', total: { $sum: 1 }, revenue: { $sum: '$amount' } } },
  { $sort: { revenue: -1 } },
  { $limit: 10 }
]).toArray()

$lookup ile Atlas ve S3'ü Birleştirme

En güçlü kaynaklar arası desen, canlı bir Atlas koleksiyonunu S3'te arşivlenmiş bir koleksiyonla birleştirmek için $lookup kullanmaktır. İşlem hattını canlı koleksiyondan ('sürücü') başlatın ve sanal S3 destekli koleksiyonda arama yapın. Gerçekleştirilen arama sayısını en aza indirmek için her zaman erkenden bir $match yerleştirin.

// Join live customers (Atlas) with archived orders (S3)
const result = await db.collection('customers').aggregate([
  { $match: { tier: 'gold', region: 'EU' } },   // filter live data first
  { $lookup: {
    from: 'orders_archive',   // virtual S3-backed collection
    let: { custId: '$_id' },
    pipeline: [
      { $match: { $expr: { $eq: ['$customerId', '$$custId'] } } },
      { $project: { orderId: 1, amount: 1, date: 1 } }
    ],
    as: 'orderHistory'
  }},
  { $addFields: { totalSpend: { $sum: '$orderHistory.amount' } } },
  { $sort: { totalSpend: -1 } },
  { $limit: 50 }
]).toArray()

Birden Çok Atlas Kümesinde Toplama

Federasyon örneğinizde birden çok Atlas kümesi depolama alanı varsa, farklı Atlas kümelerindeki koleksiyonları tek bir işlem hattında birleştirebilirsiniz. Bu, verilerin ayrı kümeler arasında parçalandığı çok kiracılı veya çok bölgeli dağıtımlar için kullanışlıdır; kümeleri birleştirmeden ya da ayrı bir raporlama veritabanı oluşturmadan kümeler arası raporlara ihtiyaç duyarsınız.

// Virtual collections pointing to different Atlas clusters
// 'orders_us' -> Atlas cluster in US
// 'orders_eu' -> Atlas cluster in EU

// Union results from two clusters
db.orders_us.aggregate([
  { $match: { date: { $gte: ISODate('2025-01-01') } } },
  { $unionWith: {
    coll: 'orders_eu',
    pipeline: [{ $match: { date: { $gte: ISODate('2025-01-01') } } }]
  }},
  { $group: { _id: '$status', count: { $sum: 1 } } }
])

$out / $merge ile Sonuçları Atlas'a Yazma

Kaynaklar arası bir toplama çalıştırdıktan sonra sonuçları $out veya $merge kullanarak canlı bir Atlas koleksiyonuna geri yazabilirsiniz. Bu, ETL desenidir: geçmiş verileri S3'ten okuyun, canlı verilerle birleştirin, toplamaları hesaplayın ve sonuçları uygulamaların hızlı ve düşük maliyetle sorgulayabileceği Atlas'taki somutlaştırılmış görünüm koleksiyonuna yazın.

// ETL: aggregate S3 archive + Atlas, write result to Atlas
db.events_2024.aggregate([
  { $match: { year: 2024 } },
  { $group: {
    _id: { region: '$region', month: '$month' },
    sessions: { $sum: 1 },
    revenue: { $sum: '$amount' }
  }},
  { $merge: {
    into: { db: 'reporting', coll: 'monthly_summary' },
    whenMatched: 'replace',
    whenNotMatched: 'insert'
  }}
])

Parquet Sütun Budama: Yalnızca Gerekenleri Okuma

Parquet dosyalarını sorgularken Data Federation, sütun budama uygular: $project aşamanız yalnızca belirli alanları belirtiyorsa sorgu altyapısı Parquet dosyasından (verileri sütun sütun depolar) yalnızca bu sütunları okur. Bu, her sütunu okumaya kıyasla okunan bayt sayısını %90'dan fazla azaltabilir. Sütun budamadan en yüksek faydayı sağlamak için $project aşamanızı işlem hattında mümkün olduğunca erken yerleştirin.

// Column pruning: only reads 'region', 'amount', 'date' columns from Parquet
db.events_2024.aggregate([
  { $project: { region: 1, amount: 1, date: 1, _id: 0 } },  // early project
  { $match: { region: 'EU' } },
  { $group: { _id: '$region', totalRevenue: { $sum: '$amount' } } }
])
// Other columns (userId, sessionId, metadata, etc.) are never read from disk

Federasyon Sorgu Performansını İzleme

Atlas Data Federation, sorgu yürütme ayrıntılarını Atlas kullanıcı arayüzündeki Sorgu Geçmişi sekmesine kaydeder. Her sorguda işlenen bayt sayısı, yürütme süresi ve taranan dosya/bölüm sayısı gösterilir. İşlenen bayt sayısının yüksek olması genellikle bölüm özniteliklerinin eksik olduğu veya sorgunun hiçbir bölüm anahtarıyla eşleşmediği anlamına gelir. Depolama yapılandırmanızı ve sorgu düzenlerinizi iyileştirmek için bu günlüğü kullanın.

// Get query stats via the admin DB on the federated instance
db.adminCommand({ currentOp: 1 })
// Shows active federated queries with bytes read, duration

// In Atlas UI: Data Federation > Query History
// Shows past queries, duration, data processed, and cost estimate

Kaynaklar Arasındaki Şema Farklarını Yönetme

Farklı dönemlerden veya sistemlerden gelen S3 dosyaları farklı şemalara (alan adları, türler ve yapı) sahip olabilir. Data Federation bu durumu sorunsuz biçimde yönetir; eksik alanlar null döndürülür, ek alanlar dahil edilir. Gruplama veya birleştirme öncesinde değişken şemaları standartlaştırmak için işlem hattınızda $ifNull, $cond ve $convert kullanabilirsiniz.

// Normalise schema variations across old and new S3 file formats
db.events.aggregate([
  { $addFields: {
    // Old format: 'user_id', New format: 'userId'
    userId: { $ifNull: ['$userId', '$user_id'] },
    // Old format: string amount, New format: number
    amount: { $convert: { input: '$amount', to: 'double', onError: 0 } }
  }},
  { $group: { _id: '$userId', total: { $sum: '$amount' } } }
])

Federasyon Sorgu Sonuçlarını Önbelleğe Alma

Data Federation, sorgular arasındaki sonuçları önbelleğe almaz; her sorgu temel kaynakları yeniden okur. Aynı raporu tekrarlı olarak çalıştıran panolar için ETL desenini kullanın: sonuçları $merge aracılığıyla bir Atlas koleksiyonuna yazan bir toplama işlemi zamanlayın, ardından panonuzun hızlı Atlas koleksiyonunu sorgulamasını sağlayın. Atlas Tetikleyicileri, bu yenilemeyi herhangi bir cron aralığında zamanlayabilir.

Kaynaklar Arası İşlem Hatlarının Sınırlamaları

Geçerli sınırlamaları dikkate alın: 1) Federasyon örneklerinde işlemler desteklenmez. 2) Dizin kullanımı yalnızca Atlas destekli koleksiyonlar için geçerlidir; S3 dosyaları için geçerli değildir. 3) Çok büyük sonuç kümelerinde zaman aşımı oluşabilir; sonuçları akış olarak geri göndermek yerine yazmak için $out/$merge kullanın. 4) S3 G/Ç işlemleri nedeniyle gecikme canlı Atlas sorgusundan daha yüksektir; bu nedenle kullanıcıya sunulan gerçek zamanlı sorgular için uygun değildir.

Hızlı Kontrol

Bu dersteki MongoDB ve NoSQL Veritabanları kavramlarını anlayıp anlamadığınızı sınayın.

Ders Özeti

Bu derste şunları öğrendiniz: kaynaklar arası toplama işlem hatları, S3 veya Atlas kümeleriyle desteklenen sanal koleksiyonlarda aynı MongoDB aşamalarını kullanır; $lookup, canlı Atlas verilerinin S3 arşivleriyle tek bir işlem hattında birleştirilmesini sağlar ve erken kullanılan $project, Parquet dosyalarında sütun budamayı etkinleştirerek taranan bayt sayısını büyük ölçüde azaltır. Sırada, sorgu performansı için S3 verilerinin bölümlenmesini inceleyeceğiz.

Başlamak ücretsiz

Yapay zeka eğitmeniyle JavaScript öğren — ücretsiz

Tarayıcında gerçek kod yaz ve çalıştır, 7/24 yapay zeka eğitmeninden anında yardım al; web'de ya da uygulamada kaldığın yerden devam et.

Kurslar
30
Dersler
120

Sıkça Sorulan Sorular

“Kaynaklar Arası Toplulaştırma İşlem Hatlarını Çalıştırma” dersi ücretsiz mi?

Evet — “Kaynaklar Arası Toplulaştırma İşlem Hatlarını Çalıştırma” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve MongoDB Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. MongoDB Academy kursu toplamda 4 dersten oluşur.

“Kaynaklar Arası Toplulaştırma İşlem Hatlarını Çalıştırma” dersinde ne öğreneceğim?

Öğrenenler, Atlas koleksiyonu verilerini S3'te saklanan JSON veya Parquet dosyalarıyla tek bir sorguda birleştiren toplulaştırma işlem hatları yazacaklardır. MongoDB Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

MongoDB Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te MongoDB Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 3. dersidir.

“Kaynaklar Arası Toplulaştırma İşlem Hatlarını Çalıştırma” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu MongoDB Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her MongoDB Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. Atlas Data Federation Nedir?
  2. S3 ve Atlas Kaynaklarını Sanal Ad Alanına Eşleme
  3. Kaynaklar Arası Toplulaştırma İşlem Hatlarını Çalıştırma
  4. Sorgu Performansı İçin S3 Verilerini Bölümleme
← MongoDB Academy Sayfasına Dön