
Veri Dışa Aktarma: Büyük Raporu Kullanıcıya İndirtmek
Yönetim panelinize bir "Excel'e aktar" düğmesi koydunuz. Birkaç yüz kayıtta harika çalışıyordu. Sonra veri büyüdü ve düğme artık beyaz ekran veya zaman aşımı üretiyor. Dışa aktarma, listeleme sayfasından tamamen farklı kısıtlara sahiptir.
Bu yazı, büyük veri dışa aktarımını ele alıyor.
Üç Ayrı Sınır
| Sınır | Belirti |
|---|---|
| Çalışma süresi | Zaman aşımı |
| Bellek | Beyaz ekran |
| Tarayıcı bekleme | Kullanıcı vazgeçer |
İkinci satır en sık karşılaşılan ve en yanıltıcı olanıdır: tüm kayıtları önce belleğe alıp sonra dosyaya yazmak, veri büyüdükçe bellek sınırını aşar ve süreç hiçbir mesaj vermeden ölür — kullanıcı yalnızca boş bir sayfa görür.
Bu, kodun hatalı olduğu anlamına gelmez.
Yalnızca ölçek değişmiştir.
Çözüm, veriyi hiç biriktirmemektir.
Akış Yöntemi
- Kayıtlar tek tek okunur.
- Her satır anında yazılır.
- Bellekte biriktirilmez.
Üçüncü adım tüm sorunu çözer: satırları okurken doğrudan çıktıya yazmak, bellek kullanımını kayıt sayısından bağımsız kılar — bir milyon satır da bin satır kadar bellek tüketir.
Bu yaklaşım için veritabanı sonuçları da akış hâlinde okunmalıdır.
Tüm sonucu belleğe alan sürücü ayarları kapatılmalıdır.
Aksi hâlde kazanç yarım kalır.
Çıktı Tamponu
- Sunucu çıktıyı tamponlayabilir.
- Tampon da bellekte durur.
- Düzenli boşaltılmalıdır.
İkinci madde gizli bir tuzaktır: satırları tek tek yazsanız bile çıktı tamponu doldurulmadan gönderilmiyorsa bellek yine birikir — tamponu belirli aralıklarla boşaltmak akış yöntemini gerçekten çalıştırır.
Bu ayrıntı atlandığında akış hiçbir fayda sağlamaz.
Sıkıştırma katmanları da tamponlama yapabilir.
Büyük dışa aktarmalarda bunlar devre dışı bırakılabilir.
Format Seçimi
| Format | Uygunluk |
|---|---|
| Virgülle ayrılmış metin | Akışa çok uygun |
| Hesap tablosu dosyası | Bellek yoğun |
| Belge dosyası | Büyük veri için uygun değil |
Birinci satır büyük veri için tek makul seçenektir: düz metin tabanlı tablo formatı satır satır üretilebildiği için milyonlarca kayıtta bile bellek sorunu çıkarmaz — hesap tablosu formatları ise genellikle tüm dosyayı bellekte kurar.
Kullanıcılar bu dosyayı yine tablo programında açar.
Sütun ayracı ve kodlama doğru seçilmelidir.
Türkçe karakterler için kodlama belirtilmelidir.
Türkçe Karakter Sorunu
- Dosya kodlaması belirtilmeli.
- Bazı programlar işaret bekler.
- Ayraç bölgeye göre değişir.
İkinci madde çok yaşanan bir şikayeti çözer: bazı tablo programları dosyanın başında özel bir işaret görmezse metni yerel kodlamayla açar ve Türkçe karakterler bozuk görünür — bu küçük işaret sorunu tamamen ortadan kaldırır.
Üçüncü madde ise ayraç seçimini etkiler.
Bazı bölgelerde virgül yerine noktalı virgül beklenir.
Yanlış ayraç, tüm veriyi tek sütuna sıkıştırır.
Arka Plana Almak
- İstek anında üretmeyin.
- Görev kuyruğuna alın.
- Hazır olunca bildirin.
Üçüncü madde en iyi kullanıcı deneyimini verir: büyük raporu arka planda üretip hazır olduğunda kullanıcıya bağlantı göndermek, hem zaman aşımı sorununu ortadan kaldırır hem kullanıcıyı ekran başında bekletmez.
Bu yaklaşım paylaşımlı barındırmada da uygulanabilir.
Zamanlanmış görev kuyruğu kontrol eder.
Kullanıcıya e-posta veya panel bildirimi gönderilir.
Erişim Güvenliği
| Risk | Önlem |
|---|---|
| Dosya web kökünde | Kök dışına al |
| Tahmin edilebilir ad | Rastgele ad üret |
| Süresiz erişim | Süre sınırı koy |
Birinci satır ciddi bir veri sızıntısı üretebilir: tüm müşteri listesini içeren bir dışa aktarma dosyasını web kökünde bırakmak, adresi bilen veya tahmin eden herkesin o dosyayı indirebilmesi demektir — arama motorları bile onu dizine ekleyebilir.
Bu dosyalar en hassas verileri içerir.
Üçüncü satır ise birikimi önler.
Eski dışa aktarmalar düzenli silinmelidir.
Ne Kadar Veri
- Filtreleri dışa aktarıma da uygulayın.
- Üst sınır koyun.
- Sütun seçimi sunun.
Birinci madde çoğu sorunu baştan önler: kullanıcının ekranda uyguladığı filtreleri dışa aktarımda da kullanmak, çoğu durumda milyonlarca satır yerine birkaç bin satır üretilmesini sağlar — kullanıcı zaten tümünü istemiyordur.
Bu, hem hızlı hem kullanışlıdır.
İkinci madde ise kötüye kullanımı sınırlar.
Üçüncü madde dosya boyutunu belirgin düşürür.
Gereksiz sütunlar çıkarıldığında boyut yarıya inebilir.
Arka plan görevleri ve büyük dosya üretimi için yeterli kaynak gerekir; Linux barındırma paketleri ile işlem ve disk limitlerinizi iş yükünüze göre seçebilirsiniz.
Sonuç
Dışa aktarma, listelemeden farklı kısıtlara sahiptir: tüm kayıtları önce belleğe almak, veri büyüdükçe sınırı aşar ve süreç hiçbir mesaj vermeden ölür. Satırları okurken doğrudan yazın, çıktı tamponunu boşaltın ve düz metin tablo formatını tercih edin. Büyük raporları arka plana alın ve üretilen dosyayı web kökünün dışında, rastgele adla ve süre sınırıyla saklayın.
Sıkça Sorulan Sorular (SSS)
Dışa aktarma beyaz ekran veriyor?
Muhtemelen bellek sınırını aşıyorsunuz. Tüm kayıtları önce belleğe alıp sonra dosyaya yazmak veri büyüdükçe sınırı aşar ve süreç hiçbir mesaj vermeden ölür. Satırları okurken doğrudan çıktıya yazın; bellek kullanımı kayıt sayısından bağımsız olur.
Satır satır yazıyorum ama yine de bellek doluyor?
Çıktı tamponu birikiyor olabilir. Tampon doldurulmadan gönderilmiyorsa bellek yine artar; tamponu belirli aralıklarla boşaltmak akış yöntemini gerçekten çalıştırır. Veritabanı sürücüsünün de sonuçları akış hâlinde okuduğundan emin olun.
Dosyayı açınca Türkçe karakterler bozuk?
Bazı tablo programları dosyanın başında özel bir kodlama işareti görmezse metni yerel kodlamayla açar. Bu küçük işaret sorunu tamamen çözer. Ayrıca ayraç seçimine dikkat edin; yanlış ayraç tüm veriyi tek sütuna sıkıştırır.
Üretilen dosyayı nerede saklamalıyım?
Web kökünün dışında, rastgele adla ve süre sınırıyla. Tüm müşteri listesini içeren bir dosyayı web kökünde bırakmak, adresi tahmin eden herkesin indirebilmesi demektir; arama motorları bile onu dizine ekleyebilir.