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

Cevap