hocam bunun için hazır programlar var (bkz. rsync) neden tekerleği yeniden keşfetmek peşindesiniz anlayamadım.
mysql ile bir sorgu çok uzun sürüyorsa ben önce mysql_slow.log'a bakardım, bir de sürekli arama yaptığım kolonları (bkz: file_name, file_path) indexlerdim ve eğer kullanıyorsam -MySQL için- InnoDB özelliğini kapatırdım. 8 Eylül 2013 11:54 tarihinde Nuri AKMAN <[email protected]> yazdı: > Merhaba, > > Üzerinde 200 bin kadar dosya bulunan bir sunucum var ve bu dosyaların > değişenlerinin/eklenenlerinin günlük olarak yedeğini BAŞKA BİR SUNUCUYA > almak istiyorum. İkinci sunucu internet üzerinde, aynı network'de değil. > > Bunun için gece yarısı çalışan bir cron yazdım; tüm dosyaların path, > filename, file size ve modified date bilgilerini alıp MySQL veritabanımda > bir tabloya yazıyor. Ayrıca, her ayın birinci günü TÜM dosyalar > veritabanına yazılıyor ve "master" adlı sahanın değeri 1 oluyor. Diğer > günlerde ise sadece yeni eklenmiş veya değiştirilmiş dosyaları veritabanına > kaydediyorum ve bu kayıtların master değerini 0 yapıyorum. > > Diğer sunucu üzerinde ise değişen bu dosyaları indirmek için yazdığım bir > program ile veritabanına bakıyor, sadece değişen/eklenen dosyaları o güne > ait bir klasör (örnek: 2013-09-30) altına indiriyorum (FTP yapıyorum). > > Günlük olarak sistemin çalışmasında her şey normal ve istediğim gibi > gidiyor. > > Fakat, herhangi bir sebeple indirme programının çalışmadığı bir durum > olabilir ihtimaline karşı birinci sunucumdaki tüm dosyaları indirmek için > bir şeyler deniyorum (File modified date ve file size değişmediyse dosyayı > indirmiyorum tabi). > > Bu amaçla, aşağıdaki SQL ile veritabanından son master tarihindeki tüm > dosyaları ve sonrasındakileri kayıtları alıp indirdiğimde sunucumun tam bir > yedeğini almış olabileceğim. > > SELECT file_list.* FROM file_list WHERE file_list.list_date >= (select > max(file_list.list_date) from file_list where file_list.list_master=1) > > Sorun da tam bu noktada çıkıyor: Bir dosya farklı günlerde modified > edilmiş olabiliyor, bunun için de veritabanına her gün kaydı düşüyor. > > Örnek: > filename, flesize, filedate > a.jpg, 3654 byte, 2013-01-01 --> Master Kayıt > a.jpg, 1234 byte, 2013-01-02 > a.jpg, 7591 byte, 2013-01-04 > a.jpg, 3237 byte, 2013-01-05 > > Yukarıdaki SQL ile indirilecek dosyaların listesini aldığımda a.jpg için 4 > satır geliyor ve ben aynı dosyayı 4 defa indirmek zorunda kalıyorum. > Halbuki, sadece en son satırdaki dosyayı almalıyım. > > Şu SQL işimi görüyor aslında: (Yaklaşık 200 bin kayıt gelmesini bekliyorum) > > SELECT * > FROM file_list > WHERE list_date >= (select max(list_date) from file_list where > list_master=1) > AND file_id IN ( > SELECT max(file_id) AS file_id > FROM file_list > WHERE list_date >= (select max(list_date) from file_list where > file_list.list_master=1) > GROUP BY file_path, file_name > ) > > ANCAK, file_list tablomda (şu an için) 1 milyon civarında kayıt var ve bu > sorgum ne yazık ki onlarca dakika sürüyor. > > Ne denediysem optimize edemedim ve alternatif bir yöntem bulamadım... > > İşte, ihtiyacım bu. > > Selamlar, > Nuri Akman > > > 8 Eylül 2013 11:00 tarihinde Serdar Güler <[email protected]>yazdı: > > Merhaba, >> >> Master alanını ne için kullanıyorsunuz tam emin olamadım belki sorgunun >> en sonuna master=0 gibi bir kriter eklemek icap edebilir. Aşağıdaki sorgu >> işinizi görecektir. >> >> select * from file_list f where not exists (select 1 from file_list f2 >> where f2.FilePath=f.FilePath and >> f2.FileName=f.FileName and f2.FileDate > f.FileDate ) ; >> >> Sizin yazdığınız sorgu standart şartlar altında çalışır ancak başka >> veritabanlarında group by ın böyle bir kullanımı yok, bir de >> ONLY_FULL_GROUP_BY<http://dev.mysql.com/doc/refman/5.0/en/server-sql-mode.html#sqlmode_only_full_group_by> >> >> SQL modu aktif ise yine mysql veritabanında da hata alacaksınız. >> >> Kolay gelsin. >> >> On Sep 8, 2013, at 7:12 AM, Omer Barlas wrote: >> >> Sıralamayi ID desc olarak yapmayı dener misin? >> >> Ömer Barlas >> >> Mobil bir cihazdan gönderilmiştir, imla ve anlam hataları olabilir. >> On 8 Sep 2013 02:47, "Nuri AKMAN" <[email protected]> wrote: >> >>> Arkadaşlar, >>> >>> Aşağıdaki verilerden oluşan bir tablom var: >>> >>> ID FilePath FileName FileDate Master >>> 1 YOL1 A 2013-09-01 1 >>> 2 YOL1 B 2013-09-01 1 >>> 3 YOL1 C 2013-09-01 1 >>> 4 YOL1 A 2013-09-02 0 >>> 5 YOL1 B 2013-09-01 0 >>> 6 YOL1 C 2013-09-01 0 >>> 7 YOL1 A 2013-09-03 0 >>> 8 YOL1 B 2013-09-03 0 >>> 9 YOL1 C 2013-09-04 0 >>> >>> >>> *Şu sorguyu çalıştırıyorum:* >>> SELECT * FROM file_list >>> WHERE file_date >= (select max(file_date) from file_list where >>> list_master=1) >>> GROUP BY file_path, file_name >>> ORDER BY file_path, file_name, file_date >>> >>> *Gelen cevap şöyle:* >>> 1 YOL1 A 2013-09-01 1 >>> 2 YOL1 B 2013-09-01 1 >>> 3 YOL1 C 2013-09-01 1 >>> >>> *Fakat, ben şu cevabın gelmesini istiyorum:* >>> 7 YOL1 A 2013-09-03 0 >>> 8 YOL1 B 2013-09-03 0 >>> 9 YOL1 C 2013-09-04 0 >>> >>> Yani, FilePath ve FileName'e göre grupladıktan sonra en güncel olan >>> dosya gelsin istiyorum. (Aynı tarihte aynı dosyanın bir çok kaydı varsa, en >>> son ID'ye sahip olan gelecek) >>> >>> Bu basit sorguyu nasıl yaparım? >>> >>> Selamlar, >>> Nuri Akman >>> >>> >>> >>> >>> >>> >>> >>> _______________________________________________ >>> Linux-programlama mailing list >>> [email protected] >>> https://liste.linux.org.tr/mailman/listinfo/linux-programlama >>> Liste kurallari: http://liste.linux.org.tr/kurallar.php >>> >>> _______________________________________________ >> Linux-programlama mailing list >> [email protected] >> https://liste.linux.org.tr/mailman/listinfo/linux-programlama >> Liste kurallari: http://liste.linux.org.tr/kurallar.php >> >> >> >> _______________________________________________ >> Linux-programlama mailing list >> [email protected] >> https://liste.linux.org.tr/mailman/listinfo/linux-programlama >> Liste kurallari: http://liste.linux.org.tr/kurallar.php >> >> > > _______________________________________________ > Linux-programlama mailing list > [email protected] > https://liste.linux.org.tr/mailman/listinfo/linux-programlama > Liste kurallari: http://liste.linux.org.tr/kurallar.php > > -- Omer Barlas [email protected]
_______________________________________________ Linux-programlama mailing list [email protected] https://liste.linux.org.tr/mailman/listinfo/linux-programlama Liste kurallari: http://liste.linux.org.tr/kurallar.php
