15 Ara 2025·7 dk okuma

Dışa Aktarma Zaman Aşımını Önleyin: Asenkron İşler, İlerleme, Streaming

Büyük CSV ve PDF raporlarında zaman aşımını önlemek için asenkron export işleri, ilerleme göstergeleri, sayfalandırma ve streaming indirmeler kullanın.

Dışa Aktarma Zaman Aşımını Önleyin: Asenkron İşler, İlerleme, Streaming

Dışa aktarmalar neden zaman aşımına uğrar — basitçe

Bir dışa aktarma, sunucu işi bir sonlandırma süresi dolmadan bitiremediğinde zaman aşımına uğrar. Bu sınır tarayıcınız, bir reverse proxy, uygulama sunucunuz veya veritabanı bağlantısı tarafından konulmuş olabilir. Kullanıcı açısından çoğu zaman rastgelemiş gibi görünür, çünkü export bazen çalışır bazen başarısız olur.

Ekranda genellikle şu şekillerden biri görünür:

  • Sürekli dönen bir yükleyici (spinner)
  • Başlayan ama sonra “network error” veren bir indirme
  • Uzun beklemeden sonra bir hata sayfası
  • İndirilen dosya boş veya bozuk

Büyük exportlar streslidir çünkü sisteminizin birden çok parçasına aynı anda yük bindirir. Veritabanı çok sayıda satırı bulup toplamalı, uygulama sunucusu bunları CSV'ye formatlamalı veya PDF'ye render etmeli ve tarayıcı büyük bir yanıtı bağlantı kopmadan almalıdır.

Büyük veri setleri belirgin tetikleyicidir, ama “küçük” exportlar da ağır olabilir. Maliyetli join'ler, çok sayıda hesaplanan alan, satır başına yapılan lookuplar ve kötü indekslenmiş filtreler normal bir raporu zaman aşımına sokabilir. PDF'ler özellikle risklidir çünkü düzen, fontlar, görseller, sayfa kırılmaları ve genellikle ilişkili verileri toplamak için ekstra sorgular içerir.

Tekrar denemeler (retries) işleri daha da kötüleştirebilir. Kullanıcı yeniler veya tekrar Export'a tıklarsa sistem aynı işi iki kere başlatabilir. Artık veritabanı çift sorgu çalıştırır, uygulama sunucusu çift dosya oluşturur ve sistem zaten zorlanırken yükü ikiye katlamış olursunuz.

İhracat zaman aşımlarını önlemek istiyorsanız, bir dışa aktarmayı normal bir sayfa yüklemesi gibi değil, arka plan görevi olarak ele alın. AppMaster gibi kod yazmadan (no-code) araçlarda bile desen (pattern) araçtan daha önemlidir: uzun süren işler “butona tıkla, yanıt bekle” akışına uymamalıdır.

Uygulamanız için doğru dışa aktarma desenini seçin

Çoğu export hatası, uygulamanın her durum için tek bir desen kullanmasından kaynaklanır; oysa veri boyutu ve işlem süresi çok değişkendir.

Basit senkron bir export (kullanıcı tıklar, sunucu üretir, indirme başlar) export küçük ve öngörülebilir olduğunda uygundur. Birkaç yüz satır, temel sütunlar, ağır formatlama yok ve aynı anda çok fazla kullanıcı yoksa bu genellikle yeterlidir. Eğer sürekli olarak birkaç saniyede bitiyorsa, basit olan genelde en iyisidir.

Uzun veya öngörülemez işler için asenkron export işleri kullanın. Bu, büyük veri setleri, karmaşık hesaplamalar, PDF düzen işleri ve yavaş bir exportun diğer istekleri bloke edebildiği paylaşılan sunucular için daha uygundur.

Asenkron işler şu durumlarda daha uygundur:

  • Exportlar düzenli olarak 10–15 saniyeden uzun sürüyorsa
  • Kullanıcılar geniş tarih aralıkları veya “tüm zamanlar” istiyorsa
  • Grafikler, görseller veya çok sayfalı PDF'ler üretiyorsanız
  • Birden fazla ekip yoğun saatlerde export yapıyorsa
  • Bir şeyler başarısız olduğunda güvenli tekrar denemeler (retry) istiyorsanız

Streaming indirmeler, export büyük ama sıralı üretilebiliyorsa yardımcı olabilir. Sunucu baytları hemen göndermeye başlar, bu daha hızlı hissi verir ve tüm dosyayı önce bellekte oluşturma ihtiyacını ortadan kaldırır. Uzun CSV indirmeleri için mükemmeldir, ancak ilk satırı yazmadan önce her şeyi hesaplamanız gerekiyorsa daha az fayda sağlar.

Yaklaşım birleştirilebilir: export üretmek (veya snapshot hazırlamak) için asenkron bir iş çalıştırın, sonra hazır olduğunda indirmeyi stream edin. AppMaster'da pratik bir yöntem, bir “Export Requested” kaydı oluşturmak, dosyayı backend business process ile üretmek ve kullanıcının tarayıcı isteğini açık tutmadan bitmiş sonucu indirmesini sağlamaktır.

Adım adım: asenkron bir export işi oluşturun

En büyük değişiklik basit: dosyayı kullanıcının tıkladığı aynı isteğin içinde üretmeyi bırakın.

Asenkron export işi işi iki parçaya böler: hızlı bir istekle bir iş oluşturma ve arka planda dosyayı üreten ağır iş.

Pratik 5 adımlık akış

  1. Export isteğini yakalayın (istek sahibi, filtreler, seçilen sütunlar, çıktı formatı).
  2. Durumu (queued, running, done, failed), zaman damgaları ve hata alanı ile bir iş kaydı oluşturun.
  3. Kuyruk, zamanlanmış worker veya adanmış worker süreci kullanarak ağır işi arka planda çalıştırın.
  4. Sonucu object storage veya dosya deposuna yazın, sonra iş kaydına bir indirme referansı kaydedin.
  5. Dosya hazır olduğunda kullanıcıyı uygulama içi bildirim, e-posta veya ekibinizin kullandığı bir mesaj kanalıyla bilgilendirin.

İş kaydını tek gerçek kaynak (source of truth) olarak tutun. Kullanıcı sayfayı yeniler, cihaz değiştirir veya sekmeyi kapatırsa bile aynı iş durumunu ve aynı indirme düğmesini gösterebilirsiniz.

Örnek: bir destek yöneticisi geçen çeyreğin tüm ticket'larını dışa aktarır. Dönen bir sekme beklemek yerine, iş kaydı queued'dan done'a geçer ve indirme görünür. AppMaster'da iş tablosunu Data Designer'da modelleyebilir, arka plan mantığını Business Process Editor'da kurabilir ve durum alanını UI akışını sürdürmek için kullanabilirsiniz.

Kullanıcıların gerçekten güveneceği ilerleme göstergeleri

İyi bir ilerleme göstergesi kaygıyı azaltır ve insanların Export'a beş kere tıklamasını engeller. Ayrıca dolaylı olarak export zaman aşımı riskini azaltır, çünkü kullanıcılar uygulama gerçek ilerleme gösterdiğinde beklemeye daha yatkındır.

İlerlemeyi insanların anlayacağı terimlerle gösterin. Yüzde tek başına yanıltıcı olabilir, bu yüzden somut şeylerle eşleştirin:

  • Mevcut adım (Veri hazırlanıyor, Satırlar çekiliyor, Dosya oluşturuluyor, Yükleniyor, Hazır)
  • İşlenen satır sayısı / toplam (veya işlenen sayfa sayısı)
  • Başlama zamanı ve son güncelleme
  • Kalan tahmini süre (sadece makul derecede stabil kalıyorsa)

Sahte hassaslıktan kaçının. Toplam işi bilmiyorsanız 73% gösterme. Önce kilometre taşları (milestones) kullanın, sonra payda belli olunca yüzdeliğe geçin. Basit bir desen: kurulum için %0–10, satırlar için %10–90 ve dosya sonlandırma için %90–100. Sayfa boyutları değişken olan PDF'ler için “render edilen kayıtlar” veya “tamamlanan bölümler” gibi daha küçük gerçekleri izleyin.

Çok sık güncelleme yapmayın ama yeterince sık güncelleyin ki uygulama canlı hissi versin. Yaygın yaklaşım her 1–3 saniyede veya her N kayıt (örneğin her 500 veya 1.000 satır) güncelleme yazmaktır; hangisi daha az sık ise onu tercih edin. Ayrıca hafif bir heartbeat zaman damgası kaydedin ki yüzde aynı kalsa bile UI “Hala çalışıyor” diyebilsin.

İş beklenenden uzun sürerse kullanıcılara kontrol verin. Çalışan bir exportu iptal etme, ilkinin kaybı olmadan yenisini başlatma ve durumlu bir export geçmişi (Queued, Running, Failed, Ready) ile kısa bir hata mesajı gösterme seçenekleri sunun.

AppMaster'da tipik bir kayıt ExportJob (status, processed_count, total_count, step, updated_at) şeklindedir. UI bu kaydı sorgular ve asenkron iş arka planda dosyayı üretirken dürüst ilerlemeyi gösterir.

Çalışmayı sınırlandırmak için sayfalandırma ve filtreleme

Büyük Verileri Partiler Halinde Dışa Aktarın
Büyük exportlarda belleği sabit tutmak için kayıtları parça parça sayfalandırın.
Başlarken Yardım Al

Çoğu export zaman aşımı, exportun her şeyi tek seferde yapmaya çalışmasından kaynaklanır: çok fazla satır, çok fazla sütun, çok fazla join. En hızlı düzeltme, işi sınırlı tutmaktır; kullanıcılara daha küçük, net bir veri dilimi dışa aktarma imkanı verin.

Kullanıcının amacından başlayın. Birisi “geçen ay başarısız faturalar” istiyorsa varsayılanı “tüm faturalar” yapmayın. Filtreleri normal ve doğal hissettirecek şekilde sunun; bu yoğun bir külfet gibi görünmemeli. Basit bir tarih aralığı ve bir durum filtresi genellikle veri setini %90 oranında azaltır.

İyi bir dışa aktarma formu genelde bir tarih aralığı (makul varsayılan: son 7 veya 30 gün), bir veya iki ana durum, isteğe bağlı arama veya müşteri/ekip seçimi ve mümkünse bir sayı önizlemesi (hatta bir tahmin) içerir.

Sunucu tarafında veriyi sayfalara ayırarak okuyun. Bu bellek kullanımını sabit tutar ve ilerleme için doğal kontrol noktaları sağlar. Sayfalarken kararlı bir sıralama her zaman kullanın (örneğin created_at sonra id). Bunun yokluğunda yeni satırlar önceki sayfalara kayabilir ve kayıp veya çift kayıt oluşabilir.

Uzun exportlar sırasında veri değişir; bu yüzden “tutarlı” olmanın ne anlama geldiğine karar verin. Basit bir yaklaşım iş başladığında bir snapshot zamanı kaydetmektir ve sadece o zamana kadar olan satırları dışa aktarmaktır. Daha katı tutarlılık gerekiyorsa, veritabanınızın desteklediği tutarlı okuma veya transaction stratejilerini kullanın.

AppMaster gibi bir no-code araçta bu, iş akışına güzel uyar: filtreleri doğrula, snapshot zamanını ayarla, sonra bir şey kalmayana kadar sayfalar üzerinden döngüye gir.

Sunucuyu yormadan streaming indirmeler

Bir Export Job Tablosu Ekleyin
ExportJob modelini oluşturun ve queued, running, done ve failed durumlarını takip edin.
Geliştirmeye Başla

Streaming, dosyayı üretirken kullanıcıya göndermeye başlamanız demektir. Sunucu dosyanın tamamını önce bellekte oluşturmak zorunda kalmaz. Bu, dosyalar büyüdükçe zaman aşımını önlemenin en güvenilir yollarından biridir.

Streaming sorguları büyütmez; eğer veritabanı işi ilk baytı hazırlamadan önce beş dakika alıyorsa istek yine zaman aşımına uğrayabilir. Yaygın çözüm streaming ile sayfalandırmayı birleştirmektir: bir parça al, yaz, flush et, devam et.

Belleği düşük tutmak için ürettikçe yazın. Bir parça (örneğin 1.000 CSV satırı veya bir PDF sayfası) üretin, yanıta yazın, flush yapın ki istemci veri almaya devam etsin. Sonradan büyük bir diziye toplayıp "sonra sırala" yapmaktan kaçının. Kararlı bir sıra gerekiyorsa sıralamayı veritabanında yapın.

Başlıklar, dosya adları ve content-type

Tarayıcıların ve mobil uygulamaların indirmeyi doğru işlemeleri için açık başlıklar kullanın. Doğru content-type (örneğin text/csv veya application/pdf) ve güvenli bir dosya adı ayarlayın. Dosya adları özel karakterlerden kaçınmalı, kısa olmalı ve kullanıcıların aynı raporu tekrar dışa aktarması durumunda bir zaman damgası içermelidir.

Devam ettirme (resume) ve kısmi indirmeler

Erken karar verin: resume destekliyor musunuz? Basit streaming genellikle byte-range resume desteklemez, özellikle üretilen PDF'ler için. Eğer destekliyorsanız Range isteklerini işleyip aynı job için tutarlı çıktı üretmelisiniz.

Yayınlamadan önce emin olun:

  • Body'yi yazmadan önce header'ları gönderin, sonra parça parça yazıp flush edin
  • Parça boyutlarını sabit tutun ki yük altındayken bellek sabit kalsın
  • Deterministik bir sıralama kullanın ki kullanıcı çıktıya güvenebilsin
  • Resume desteklenip desteklenmediğini ve bağlantı koparsa ne olduğunu dokümante edin
  • Sunucu tarafı limitler (maks satır, max süre) ekleyin ve bunlara ulaşıldığında kullanıcı dostu hata döndürün

AppMaster'da export üretimini backend akışta tutun ve stream'i tarayıcıdan değil sunucu tarafından yapın.

Büyük CSV exportları: pratik taktikler

Büyük CSV'ler için dosyayı tek parça gibi değil, döngü şeklinde düşünün: bir dilim okuyun, satırları yazın, tekrarlayın. Bu bellek kullanımını sabit tutar ve retry'leri daha güvenli yapar.

CSV'yi satır satır yazın. Asenkron bir işte üretiyor olsanız bile "tüm satırları topla, sonra stringify yap" yönteminden kaçının. Bir writer açık tutun ve her satırı hazır olur olmaz ekleyin. Yığını (cursor) destekleyen bir stack'iniz varsa database cursor veya sayfalama kullanın ki milyonlarca kaydı bir kerede yüklemeyin.

CSV doğruluğu hız kadar önemlidir. Dosya görünüşte sorun yokken birisi Excel ile açtığında sütunlar kayabilir.

CSV dosyalarını bozulmaktan koruyan kurallar

  • Virgül, tırnak ve yeni satırları her zaman escape edin (alanı tırnak içine alın ve içteki tırnakları çift tırnak yapın)
  • UTF-8 çıktısı kullanın ve İngilizce olmayan isimleri uçtan uca test edin
  • Sabit bir başlık satırı kullanın ve sütun sırasını her çalıştırmada sabit tutun
  • Tarih ve ondalıkları normalize edin (bir format seçin ve tutarlı kullanın)
  • Veri '=' , '+' , '-' veya '@' ile başlayabiliyorsa formül olmamasına dikkat edin

Performans genelde yazmadan çok veri erişiminde ölür. N+1 lookuplara dikkat edin (örneğin döngü içinde her müşteri için sorgu yapmak). İlgili verileri tek sorguda çekin veya ihtiyacınız olanı ön yükleyin, sonra satırları yazın.

Gerçekten büyük exportlar için onları kasıtlı olarak bölün. Pratik bir yaklaşım ay başına, müşteri başına veya varlık türüne göre dosya bölmektir. "5 yıllık siparişler" exportu 60 aylık dosyaya bölünürse her ay bağımsız olarak üretilebilir ve tek bir yavaş ay herkesi engellemez.

AppMaster kullanıyorsanız, veri setini Data Designer'da modelleyin ve exportu arka plan business process olarak çalıştırıp sayfalar üzerinden geçerken satırları yazdırın.

Büyük PDF exportları: öngörülebilir tutun

Kullanıcıların Güveneceği İlerlemeyi Oluşturun
Satırları çekme, dosya oluşturma ve yükleme gibi adım adım ilerlemeyi gösterin.
Hemen Oluşturun

PDF üretimi genelde CSV'den yavaştır çünkü CPU yoğundur. Sadece veri taşımı değil, sayfa düzeni, font yerleşimi, tabloların çizimi ve resimlerin yeniden boyutlandırılması vardır. PDF'i hızlı yanıt yerine arka plan görevi olarak ele alın ve net sınırlar koyun.

Şablon seçimleri 2 dakikalık bir exportu 20 dakikaya çevirebilir. Basit düzenler kazandırır: daha az sütun, daha az iç içe tablo ve öngörülebilir sayfa kırılmaları. Görseller en hızlı yavaşlatan unsurlardan biridir; özellikle büyük, yüksek DPI veya render sırasında uzak bir kaynaktan çekiliyorsa.

Hız ve güvenilirliği genelde artıran şablon kararları:

  • Bir veya iki font kullanın, ağır fallback zincirlerinden kaçının
  • Başlık ve footer'ları basit tutun (her sayfada dinamik chartlardan kaçının)
  • Büyük raster görüntüler yerine vektör simgeleri tercih edin
  • Metni birçok kez yeniden ölçen "auto fit" düzenlerinden kaçının
  • Karmaşık transparanlık ve gölgelerden kaçının

Büyük exportlar için batch'lerde render yapın. Bir bölümü veya küçük bir sayfa aralığını üretin, geçici dosyaya yazın, sonra nihai PDF'i birleştirin. Bu bellek kullanımını sabit tutar ve worker çökse retry'leri daha güvenli yapar. Ayrıca asenkron işler ve anlamlı adımlarla ilerleme göstergeleriyle iyi eşleşir (örneğin: "Veri hazırlanıyor", "1–50 sayfalar render ediliyor", "Dosya sonlandırılıyor").

Ayrıca PDF gerçekten kullanıcının ihtiyacı mı diye sorgulayın. Eğer kullanıcı esas olarak analiz için satırlar/sütunlar istiyorsa CSV seçeneği sunun. Özet amaçlı daha küçük bir PDF ile tam veri setini CSV olarak vermek genelde iyi bir denge sunar.

AppMaster'da bu doğal bir uyum sağlar: PDF üretimini arka plan işine dönüştürün, ilerlemeyi raporlayın ve iş tamamlandığında bitmiş dosyayı indirme için sunun.

Zaman aşımlarına yol açan yaygın hatalar

Export hataları genellikle gizemli değildir. Birkaç seçim 200 satırda çalışır, 200.000'de çöker.

En yaygın hatalar:

  • Tüm exportu tek bir web isteği içinde çalıştırmak. Tarayıcı bekler, sunucu işçi meşgul olur ve yavaş sorgu veya büyük dosya sizi zaman sınırlarını aşmaya iter.
  • İlerlemenin zamana dayalı gösterilmesi. Süre sayaçları %90'a hızlıca gelip takıldığında kullanıcı sayfayı yeniler, iptal eder veya başka bir export başlatır.
  • Tüm satırları belleğe okuyup sonra dosya yazmak. Uygulaması kolaydır ama bellek limitlerine çarpmanın hızlı bir yoludur.
  • Uzun veritabanı transaction'ları tutmak veya kilitlere dikkat etmemek. Export sorguları yazmaları bloke edebilir veya yazmalar tarafından bloke edilebilir; bu yavaşlama tüm uygulamaya yayılabilir.
  • Sınırsız exporta izin vermek ve temizlik yapmamak. Tekrarlayan tıklamalar iş yığınları oluşturur, depolamayı doldurur ve eski dosyalar etrafa saçılır.

Somut bir örnek: bir destek lideri son iki yılın tüm ticket'larını export eder ve hiçbir şey olmadığını düşünerek iki kez tıklar. Şimdi iki aynı export veritabanı için yarışır, her ikisi de büyük dosyaları bellekte üretir ve her ikisi de zaman aşımına uğrar.

AppMaster gibi bir no-code araçla inşa ediyorsanız aynı kurallar geçerlidir: exportları istek yolundan çıkarın, ilerlemeyi işlenen satırlarla takip edin, çıktıyı üretirken yazın ve aynı anda kaç export çalışabileceğine dair basit sınırlar koyun.

Yayına almadan önce hızlı kontroller

Mantığı Yeniden Yazmadan İterasyon Yapın
Gereksinimler değiştiğinde kaynak kodu yeniden üreterek mantığı tekrar yazmadan ilerleyin.
AppMaster'ı Deneyin

Export özelliğini prod'a almadan önce zamanlayıcı zihniyetiyle kısa bir kontrol yapın. Uzun işler istek yolunun dışında olsun, kullanıcı dürüst ilerlemeyi görsün ve sunucu her şeyi aynı anda yapmaya çalışmasın.

Kısa bir ön uç checklist:

  • Büyük exportlar arka plan işi olarak çalışsın (küçük olanlar güvenilir şekilde hızlı bitiyorsa senkron olabilir)
  • Kullanıcılar queued, running, done veya failed gibi açık durumları ve zaman damgalarını görsün
  • Veri parça parça okunup kararlı bir sıralama ile yazılsın (örneğin created_at ve ID tie-breaker)
  • Bitmiş dosyalar kullanıcı kapatsa bile daha sonra indirilebilsin, export yeniden çalıştırılmasın
  • Eski dosyalar ve iş geçmişi için limit ve temizlik planı olsun (yaşa dayalı silme, kullanıcı başına max job, depolama kısıtları)

İyi bir sağlık kontrolü en kötü senaryoyu çalıştırmaktır: izin verdiğiniz en geniş tarih aralığını export edin ve bir başkası aynı anda kayıt eklerken test edin. Çift kayıt, eksik satır veya takılı ilerleme görüyorsanız sıralama veya chunking kararlı değildir.

AppMaster üzerine kuruyorsanız bu kontroller gerçek parçalara kolayca eşlenir: Business Process Editor'da arka plan süreci, veritabanında export job kaydı ve UI'nın okuduğu ve yenilediği bir status alanı.

Hata güvenli olsun. Başarısız bir iş hatasını saklamalı, yeniden denemeye izin vermeli ve eksik ama "tamamlanmış" görünen kısmi dosyalar üretmemelidir.

Örnek: Yılların verisini uygulamayı dondurmadan export etmek

Prodüksiyonda Exportları Çalıştırın
Export worker'ınızı AppMaster Cloud veya tercih ettiğiniz bulut sağlayıcısına deploy edin.
Başlarken Yardım Al

Bir operasyon yöneticisi ayda iki export alıyor: analiz için son 2 yılın CSV'si ve muhasebe için aylık fatura PDF seti. Uygulamanız bu işlerden herhangi birini normal bir web isteği sırasında üretmeye çalışırsa zamanla sınırlarına takılırsınız.

İşin sınırlarını önce belirleyin. Export ekranı bir tarih aralığı (varsayılan: son 30 gün), isteğe bağlı filtreler (durum, bölge, satış temsilcisi) ve net bir sütun seçimi istesin. Bu tek değişiklik çoğu zaman 2 yıllık, 2 milyon satırlık problemi yönetilebilir hale getirir.

Kullanıcı Export'a tıkladığında uygulama bir Export Job kaydı oluşturur (type, filters, requested_by, status, progress, error_text) ve kuyruğa koyar. AppMaster'da bu Data Designer'da bir model ve arka planda çalışan bir Business Process şeklinde uygulanır.

İş çalışırken UI güvenilir bir durum gösterir: queued, processing (örneğin 3/20 chunk), generating file, ready (indirme butonu) veya failed (kısa hata ve retry).

Chunking anahtar detaydır. CSV işi siparişleri sayfalarda okur (örneğin 50.000'lik partiler), her sayfayı çıktı dosyasına yazar ve her chunk'tan sonra ilerlemeyi günceller. PDF işi de her fatura partisinde (örneğin ay bazında) aynı şekilde davranır, böylece tek bir yavaş ay her şeyi bloke etmez.

Bir şey bozulursa (kötü filtre, izin yok, depolama hatası), iş Failed olarak işaretlenir ve kullanıcıya eyleme dönük kısa bir mesaj gösterilir: "Mart faturaları oluşturulamadı. Lütfen yeniden deneyin veya Destek ile Job ID 8F21 ile iletişime geçin." Yeniden deneme aynı filtreleri kullanır, böylece kullanıcı baştan başlamaz.

Sonraki adımlar: Exportları acil durum değil, yerleşik özellik yapın

Uzun vadede export zaman aşımlarını önlemenin en hızlı yolu, exportu bir düğme basma olayı olarak değil, tekrar eden ve standart bir desen olarak ele almaktır.

Her yerde tek bir varsayılan yaklaşımı seçin: asenkron bir iş arka planda dosyayı üretsin ve kullanıcı dosya hazır olduğunda indirme seçeneği alsın. Bu tek karar, kullanıcı isteğinin tüm dosya için beklemek zorunda olmamasıyla birlikte çoğu “testte çalıştı” sürprizini ortadan kaldırır.

Kullanıcıların daha önce oluşturdukları dosyaları kolayca bulmasını sağlayın. Bir export geçmişi sayfası (kullanıcı başına, workspace başına veya hesap başına) tekrar exportları azaltır, destek ekiplerinin "dosyam nerede?" sorusuna cevap vermesini kolaylaştırır ve durum, hata ve son kullanma bilgilerini göstermek için doğal bir yer sağlar.

AppMaster içinde bu deseni kurmak kolaydır: platform gerçek kaynak kod üretebilir ve backend mantığı, veri modelleme ile web/mobile UI'yi tek yerde destekler. Hızlıca güvenilir asenkron export işleri oluşturmak isteyen ekipler genellikle appmaster.io'yu işin job tablosunu, arka plan sürecini ve ilerleme UI'sını elle bağlamadan kurmak için kullanır.

Sonra gerçekten neyin sorun yarattığını ölçün. Yavaş veritabanı sorgularını, CSV üretim süresini ve PDF render sürelerini takip edin. Mükemmel gözlemlenebilirliğe ihtiyacınız yok: export başına süre ve satır sayısını loglamak hangi raporun veya filtre kombinasyonunun sorun çıkardığını hızlıca gösterir.

Exportları başka bir ürün özelliği gibi ele alın: tutarlı, ölçülebilir ve desteklemesi kolay.

SSS

İhracatlar bazen çalışırken neden zaman aşımına uğruyor?

Bir dışa aktarma, isteğin geçtiği yolda bir yerdeki zaman sınırı dolmadan iş bitmediğinde zaman aşımına uğrar. Bu sınır tarayıcıdan, reverse proxy'den, uygulama sunucusundan veya veritabanı bağlantısından gelebilir; bu yüzden kök neden aynı olsa da durum bazen rastgeleymiş gibi görünür.

Normal “tıkla ve indir” export ne zaman yeterli, ne zaman asenkron iş kullanmalıyım?

Basit senkron dışa aktarma, veriler küçük ve öngörülebilir olduğunda ve birkaç saniye içinde tamamlanıyorsa uygundur. Ancak dışa aktarmalar genelde 10–15 saniyeden uzun sürüyorsa, geniş tarih aralıkları, ağır hesaplamalar veya PDF'ler içeriyorsa, tarayıcı isteğinin açık kalmaması için asenkron işlere geçin.

AppMaster'da uygulayabileceğim en basit asenkron export akışı nedir?

Önce bir iş kaydı oluşturun, sonra ağır işi arka planda yapın ve son olarak kullanıcıya bitmiş dosyayı indirmesini sağlayın. AppMaster'da yaygın bir düzen, Data Designer'da bir ExportJob modeli ve arka planda status, ilerleme alanlarını güncelleyen bir Business Process kurmaktır.

Kullanıcıların gerçekten güveneceği ilerlemeyi nasıl gösteririm?

Geçen zamana değil, gerçek işe odaklanın. Pratik bir yaklaşım step, processed_count, total_count (biliniyorsa) ve updated_at gibi alanları saklamak, UI'nin düzenli olarak sorgulayıp kullanıcıya sıkıştıklarını hissettirmemesini sağlamaktır.

Kullanıcıların aynı exportu defalarca başlatmasını nasıl engellerim?

Export isteğini idempotent yapın ve iş kaydını tek gerçek kaynak olarak tutun. Kullanıcı tekrar tıkladığında aynı filtre ve parametrelerle hali hazırdaki çalışan işi gösterin (veya aynı filtre için kopyaları engelleyin), böylece aynı pahalı işi tekrar başlatmazsınız.

Büyük exportlar için veriyi sayfalandırmanın en güvenli yolu nedir?

Belleğin sabit kalması ve doğal ilerleme kontrol noktaları için veriyi parça parça okuyup yazın. Sayfalandırma yaparken belirli ve kararlı bir sıralama kullanın (örneğin created_at, sonra id) ki uzun sürede veri değişse bile kayıtları kaçırmayın veya kopyalamayın.

İş çalışırken veriler değişiyorsa dışa aktarmayı nasıl tutarlı tutarım?

İş başladığında bir snapshot zamanı kaydedin ve sadece o zamana kadar olan satırları dışa aktarın; böylece çalışma sırasında çıktı “hareket” etmez. Daha sıkı garanti gerekiyorsa veritabanınızın desteklediği tutarlı okuma veya işlem (transaction) stratejilerini kullanabilirsiniz, ama çoğu durumda net bir snapshot kuralı kullanıcılar için yeterince açıktır.

Streaming indirmeler zaman aşımını tek başına engeller mi?

Streaming, veriyi sıralı üretebildiğinizde ve ilk baytı erken gönderebildiğinizde yardımcı olur; özellikle büyük CSV'lerde etkilidir. Ancak ilk bayt yazılmadan önce veritabanı sorguları dakikalar sürüyorsa streaming tek başına zaman aşımını çözmez. Bu yüzden streaming'i sayfalandırmayla birleştirmek en iyi sonuç verir.

Kırık ya da yavaş CSV exportlarının en yaygın sebepleri nelerdir?

Satırları işledikçe yazın ve doğru CSV kaçış kurallarına uyun ki dosya Excel gibi araçlarda bozulmasın. Kodlama genellikle UTF-8 olmalı, başlık satırı ve sütun sırası sabit tutulmalı ve per-satır sorgulamalardan kaçınılmalıdır.

PDF exportları neden CSV'den daha sık başarısız oluyor ve onları nasıl güvenilir yaparım?

PDF üretimi düzenleme, fontlar, görüntüler ve sayfa kırılmaları içerdiği için CPU ağırlıklıdır; bu yüzden PDF'i arka planda çalışan bir iş olarak ele alın. Şablonları basit tutun, büyük veya uzak resimleri render sırasında çağırmaktan kaçının ve kullanıcıya anlamlı adımlarla ilerleme gösterin.

Başlaması kolay
Harika bir şey yaratın

Ücretsiz planla AppMaster ile denemeler yapın.
Hazır olduğunuzda uygun aboneliği seçebilirsiniz.

Başlayın