Merhaba arkadaşlar, benim sorum sunucuya dosya yükleme hakkında olacak. örneğin kaydettiğim bir veri ile ilişkili dosyaları da sisteme yüklemem gerektiğinde izlemem gereken yolun ne olması gerektiğini kestiremedim. daha doğrusu profesyonelce nasıl olmalıdır diye düşündüm.

Diyelim ki uygulamamda projeler diye bir tablom var. Proje adı, tarihi v.s bilgileri veri tabanında tutuluyor. projelerle ilgili dosyalar da var. Word, excel yazışmaları, pdf, resim v.s gibi. bu dosyaların da sunucuya yüklenmesi ve projeler gösterilirken kullanıcıya listelenmesi gerekiyor. Burada beni düşündüren kısım,

  1. dosyaları diske yazıp path kısımlarını veritabanına mı yazmalı?
  2. dosyaları da veri tabanına byte olarak mı yazmalı?

örneğin GIT veya dosya paylaşım siteleri bu işi hangi mantıkla yapar? Bu konudaki fikirleriniz nelerdir?

soruldu: 21 Ağu '13, 01:01

barteloma's gravatar image

barteloma
330111322
cevap kabul oranı: 0%


Diske Yazmanın Avantajları

  • Diske yazmanın en büyük yararı, bu işin çok kolay olması. Birçok sunucu taraflı dil için "SaveFile" benzeri metodlar vardır, sadece yolunu verirsiniz ve metod dosyayı upload eder.
  • Diske yazdığınız dosyaları taşıma işi kolay olur. Sadece kopyala yapıştır.

Diske Yazmanın Dezavantajları

  • Diske yazılan dosyalar ile o dosyaya ait, veritabanındaki kayıtlar arasında doğrudan sıkı bir ilişki yoktur. Bundan dolayıda veritabanından bir kayıt silindiğinde, ilgili kayıtla ilişkili dosyalar direk olarak silinmez. Bunun için, uygulama tarafında bu iş için kod yazmak gerekir.

  • Ayrıca diske yazmak için dosya yazma işlemlerinin verilmiş olması gerekiyor. Bu kendi sunucumuz için kolaydır. Ama başka sunucularda bir kaç ayar yapmayı gerektirebilir.


Veritabanına Yazmanın Avantajları

  • Dosyaya yazmanın devavantajının tersi olan, ilişki meselesi, veritabanı için avantajdır. Yani kayıt ile ilgili dosyası ilişkilidir. Bundan dolayıda, bir Join ile kayıt ve dosyalarını birleştirerek, tek sorguda silme işlemi yapılaiblir. Ayrıca okuma yazma işlemleri için izinlerle de uğraşmak gerekmez.

  • Dosyalar sadece tek bir yerde, yani kayıtlarla beraber veritabanında olduğundan, veritabanı için backup yapılınca, dosyaları tekrardan kopyalayarak taşımaya gerek kalmaz.

Veritabanına Yazmanın Dezavantajları

  • Veritabanına dosya yazmanın en başta gelen dez-avantajı performanstır. Tabiki bu dosya boyutuna ve sunucunun teknik özelliklerine göre değişebilir.

  • Dosyaya ulaşma konusundaki sıkıntı. Örneğin resimler için; bir resim üzerinde işlemler yapacaksak, (boyutlandırma, döndürme, kalite değişikliği,....) bunun için bile resmi önce belleğe alıp, sonra üzerinde çalışıp tekrar kayıt etmek gerekir. Bu işlemler biraz külfetlidir. Çünkü sürekli byte - dosyatipi dönüşümü yapmak gerekiyor.


Kendim diske yazmayı tercih ediyorum. Özellikle web projelerinde resimler üzerinde sürekli işlemler yapmak gerekebiliyor. Bundan dolayıda, resmi veritabanından diske almak, işlem yapmak ve tekrar yazmak. Bu aradaki performans kaybını yazmıyorum bile. Resimlerde, performans gözle görülür bir etki yapmaktadır.

permanent link

cevaplandı: 21 Ağu '13, 04:12

AliR%C4%B1za%20Ad%C4%B1yah%C5%9Fi's gravatar image

AliRıza Adıyahşi ♦
7.9k146288
cevap kabul oranı: 44%

Diske yazma işlemi web projeleri için FileUpload yöntemi ile gerçekleştiriliyor. Büyük dosyalar için bu upload işlemine hükmetmek biraz zor görünüyor. Örneğin yüklenirken % kaç yüklendi ve kalan % kaç gibi senaryoları kodlamak için çok takla atmak gerekiyor. Ayrıca yüklerken diyelim ki ağda kopma oldu bu durumda yarım kalan dosya ne olacak?

(21 Ağu '13, 05:14) barteloma barteloma's gravatar image
1

Veritabanına yazarken farklı birşey mi oluyor ki? Yani demek istediğim upload etmediğiniz bir dosyayı zaten veritabanına yazamazsınız.

(21 Ağu '13, 05:20) AliRıza Adıyahşi ♦ AliR%C4%B1za%20Ad%C4%B1yah%C5%9Fi's gravatar image
1

Bu işi bence en mantıklı yoldan çözen sistemi Hibernate te var.. Veritabanında dosyanın rferans kodu bulunur, gönderilen dosya da başka bir klasörde saklanır. Bana kalırsa da veritabanında binary olarak bir dosya saklamak doğru bir çözüm değil...

(22 Ağu '13, 02:58) dreampowder dreampowder's gravatar image

@dreampowder, yazdığınızdan anladığım: dosyayı byte dizisine cevirmeden diskte tutar gibi veritabanında tutmuş gibi oluyoruz? Doğru anladıysam, bu çok güzel bir çözüm. Peki bu dosyalar sunucuda nerede tutuluyor?

(22 Ağu '13, 03:11) AliRıza Adıyahşi ♦ AliR%C4%B1za%20Ad%C4%B1yah%C5%9Fi's gravatar image
1

Ben bu tarz bir altyapiyla play framework uzerinde calisim, Dostalar standart halinde bilisayarda referans isimleriyle bir klasorde tutuluyordu. Hibednate ten dosyayi istediginizde size oradan dosyayi alip veriyor.. Ben daha sonra dosyalarin saklanma yeri olarak amazon s3 ayarladim. Yine ayni mantik fakat saklanma yeri s3 oluyor..

(22 Ağu '13, 03:43) dreampowder dreampowder's gravatar image
Cevabınız
toggle preview

Bu soruyu takip et

E-Posta üzerinden:

Üyelik girişi yaptıktan sonra abonelik işlemlerini yapabilirsiniz

RSS üzerinden:

Cevaplar

Cevaplar ve Yorumlar

Yazı Formatlama

  • *italic* ya da _italic_
  • **bold** ya da __bold__
  • link:[text](http://url.com/ "başlık")
  • resim?![alt text](/path/img.jpg "başlık")
  • liste: 1. Foo 2. Bar
  • temel HTML etiketleri de kullanılabilir

Bu sorunun etiketleri:

×8
×7

Soruldu: 21 Ağu '13, 01:01

Görüntüleme: 944 kez

Son güncelleme: 22 Ağu '13, 03:43

powered by BitNami OSQA