Webmaster ve Yazılım Geliştiriciler
Server Klasörleme Mantığı (İleri Programlama)
Server Klasörleme Mantığı (İleri Programlama)
-
210.000 kayıt olan bir db var ve her kaydın ortalama 8-10 resmi var.
bu resimlerin şu anda sadece db de download edilecek URL'leri mevcut henüz downloada başlamadım.
fakat downloada başladığımda çok büyük bir problem olacak.
windowsta eğer alt klasör sayısı abarırsa hdd nin io değerleri aşırı düşüyor ve bütün sistem iis dahik aşırı yavaşlıyor. serverda sas disk olmasına rağmen sadece imaj server için 2x1tb hdd aldık raid1 yaptım şu anda herşey hazır imajları download edip istiflemem kaldı.
elimde her ürünün unic bir Id si var.
kendi oluşturduğum alt klasör oluşturma mantığına göre her id nin rakamlarını toplayıp 9 dan büyükmü ona bakıyorum eğer büyükse recursive ile kendini tekrar çağırıp rakamların tekrar topluyorum bu şekilde 9 veya dokuzdan küçük olana kadar kendini çağırıyorum ve her çağırdığında path olarak bir derine iniyorum. uygulamalı olarak görmek isterseniz şu şekilde :
139708 > /28/10/1/
139710 > /21/3/
139712 > /23/5/
139720 > /22/4/
139722 > /24/6/
139724 > /26/8/
139726 > /28/10/1/
139728 > /30/3/
139730 > /23/5/
139732 > /25/7/
139738 > /31/4/
139740 > /24/6/
139742 > /26/8/
139744 > /28/10/1/
139746 > /30/3/
139748 > /32/5/
139750 > /25/7/
139752 > /27/9/
139754 > /29/11/2/
buna rağmen bir klasörde 100.000 üzerinde klasör oluşuyor. daha farklı bir klasörleme mantığı lazım.böyle bir projeyle uğraşıp ta çözüm bulan mürid varmıdır?
örnek olması açısından yazdığım voidi de koyuyorum (ürün id gönderince hangi path olacağını döndürüyor recursive)
private string ReturnPath(string id, string path = "") { if (path == "") path = @"/"; int i = 0; foreach (char c in id) { i += int.Parse(c.ToString()); } path = path + i.ToString() + "/"; if (i > 9) { path = ReturnPath(i.ToString(), path); } else return path; return path; }
-
-
ileri programlama göremedim konuda,
ama en basitinden şöyle yapabilirsin
var id = "1234"; var padding = "0000000000"; var idLength = id.length; var newId = padding.substring(0, (10 - idLength)) + id; console.log(newId.substring(0,4),newId.substring(4,7),newId.substring(7,10));
-
b-tree işimi görmüyor kendim bir algoritma oluşturmam lazım.
SharpShooter hocam ayrıntıya girmedim backgrounda çok derin bir mekanizma var.
senin verdiğin kodda padding diye bir değişken var iş onun üzerinden dönüyor.
ben aynı id ile her voidi çalıştırdığımda aynı sonucun dönmesi lazım.
yoksa her image üreten ashx de bir sqlconnection açması gerekecek. onun önüne geçmek için sadece id ile güzel bir klasör mantığı oturtursam yine sadece id kullanarak o ürünün resimlerine ulaşabilirim.
ayrıca her resmin 4 farklı ebadı olacak küçük, orta, büyük, orjinal şeklinde. klasörleme mantığını oturtabilirsem gerisi kolay.
yorumlar yapıcı yönde olursa sevinrim.
-
manglerman bunu yazdı
b-tree işimi görmüyor kendim bir algoritma oluşturmam lazım.
SharpShooter hocam ayrıntıya girmedim backgrounda çok derin bir mekanizma var.
senin verdiğin kodda padding diye bir değişken var iş onun üzerinden dönüyor.
ben aynı id ile her voidi çalıştırdığımda aynı sonucun dönmesi lazım.
yoksa her image üreten ashx de bir sqlconnection açması gerekecek. onun önüne geçmek için sadece id ile güzel bir klasör mantığı oturtursam yine sadece id kullanarak o ürünün resimlerine ulaşabilirim.
ayrıca her resmin 4 farklı ebadı olacak küçük, orta, büyük, orjinal şeklinde. klasörleme mantığını oturtabilirsem gerisi kolay.
yorumlar yapıcı yönde olursa sevinrim.
hayır hocam,
bu verdiğim metod ile sadece id değişkeniyle resme ulaşabilirsin..
örnek:
ürün id: 125363 olsun
bunu yukarda verdiğim metoda sokarsan geriye
0000/125/363
çıkar
bu yukarida çıkanlar her biri klasör
0000 klasörü içinde 125 klasörü var onun içinde 363
en son 363 ün içine fotoyu koyucaksın.
anlamadıysan daha detaylı anlatayım
SharpShooter tarafından 15/Tem/13 22:08 tarihinde düzenlenmiştir -
SharpShooter bunu yazdımanglerman bunu yazdı
b-tree işimi görmüyor kendim bir algoritma oluşturmam lazım.
SharpShooter hocam ayrıntıya girmedim backgrounda çok derin bir mekanizma var.
senin verdiğin kodda padding diye bir değişken var iş onun üzerinden dönüyor.
ben aynı id ile her voidi çalıştırdığımda aynı sonucun dönmesi lazım.
yoksa her image üreten ashx de bir sqlconnection açması gerekecek. onun önüne geçmek için sadece id ile güzel bir klasör mantığı oturtursam yine sadece id kullanarak o ürünün resimlerine ulaşabilirim.
ayrıca her resmin 4 farklı ebadı olacak küçük, orta, büyük, orjinal şeklinde. klasörleme mantığını oturtabilirsem gerisi kolay.
yorumlar yapıcı yönde olursa sevinrim.
hayır hocam,
bu verdiğim metod ile sadece id değişkeniyle resme ulaşabilirsin..
örnek:
ürün id: 125363 olsun
bunu yukarda verdiğim metoda sokarsan geriye
0000/125/363
çıkar
işte o zaman 6 basamaklı id lerden toplamda 50.000 tane varsa 0000/ klasöründe tam 50 bin tane klasör olur.
bende bundan bahsediyorum. 50.000 tane alt klasör olmasın bunu bir şekilde X/Y/Z/T şeklinde bölebileyim. ve random değerlere göre değil sadece id ye göre.
-
töbe yarabbim... hala random diyorsun
abi okuduğun kodu anlamıyorsun, sen siktir et bu işleri
iyi akşamlar
SharpShooter tarafından 15/Tem/13 22:13 tarihinde düzenlenmiştir -
SharpShooter bunu yazdı
töbe yarabbim... hala random diyorsun
abi okuduğun kodu anlamıyorsun, sen siktir et bu işleri
iyi akşamlar
güzel kardeşim okuma yazman yokmu senin.
benim bütün id lerim 6 basamaklı. verdiğin mantığı kullandığımda bütüüüüüüüüüün alt klasörlerin hepsi 0000/ klasöründe olmayacakmı ?
bir klasörde 180.000 klasör olduktan sonra hiç mantık arayama gerek yoktu.
ben bundan bahsediyorum.
ayrıca senden gelecek hayır hiç gelmesi. rica ediyorum başka mantık önerme.
aklıma bir yöntem geldi onu test ediyorum.
başka önerilere açığım.
-
bildiğin yanlışlardan biri,
klasör içinde dosyaların çok olursa sıkıntı çıkar.
klasör içinde istediğin kadar klasör açarsın
boşuna debelenme diye diyorum :) gerçi hoş hem bilgisiz hem çok atarlısın
-
FAT32:
- Maximum number of files: 268,435,437
- Maximum file size: 4GB
- maximum number of files per directory: up to 65535, or less depending on file names
NTFS:
- Maximum number of files: 4,294,967,295
- Maximum file size: 16TB currently (16EB theoretically)
Ext2:
- Maximum number of files: 10¹⁸
- Maximum file size: 2TB
- theoretical file per directory limit: 1.3 × 10²⁰ files
Ext3:
- Maximum number of files: number of bytes in volume/2¹³.
- Maximum file size: 16GB (1KB block) to 2TB (4KB block)
----
hocam neticede o dosya sayısına her şekilde ulaşacaksın ama..
ntfs için klasör isminin uzunluğu 255 karaktermiş.
20 id yi tek klasör yaparsn.. dosya yolu şöyle olur;
139708-139710-139712-139720...../gorseller(yaklaşık 80 tane).jpg
klasör sayın 10k ya düşer.
veritabanına bir sütun daha açıp idnin yanına dosya yolunu eklersin her seferinde sorgu yapmamak için.
çözdükten sonra tecrübeni yazarsan iyi olur takipteyim.
-
hocam karesini al, 4 ile çarp filan devam et böyle yaptığın gibi olmazmı ?
en baştaki sayıyı verdiğinde belirttiğin algoritmaya göre ilerler program zaten hepsini bulur