İyinet'e Hoşgeldiniz!

Türkiye'nin En Eski Webmaster Forum'una Hemen Kayıt Olun!

Kayıt Ol!

İlginç bir soru

trichnosis

0
İyinet Üyesi
Katılım
19 Şubat 2004
Mesajlar
390
Reaction score
1
Merhaba

Elinizde

SELECT * FROM jos_opensef_sef WHERE published = '1'
AND valid = '1'
AND (direction IS lisanssız OR direction = '' OR direction = 'o')
AND (site_id IS lisanssız OR site_id = -1)
ORDER BY site_id DESC, published DESC, valid DESC, LENGTH(direction) DESC;

şeklinde bir sql sorgusu olduğunu , jos_opensef_sef tablosunda 20.000 tane kayıt olduğunu (ve bu kayıt sayısının günden güne arttığını , yıl sonunbda 150.000 gibi bir rakama ulaşacağını) düşünün ve bu sorgunun da seve seve çalıştırmak zorunda olduğunuz bir sorgu olduğunu düşününün .

Bu sorguyu serverda hızlandırmanın bir yolu varmıdır ? Pek fazla teknik bir bilgim yok ama atıyorum

*server da bu sorguyu günde bir sefer çalıştırıp isteyen uygulamalara öyle
yollamak
* server da bir şekilde bunun sürekli cache edip ben istediğimde güncellenmesini sağlamak

vs vs.

İşte benim problemim bu aklına bir şey gelen var mı ? ben zend opt. ve phpcache hızladırıcı kurdum ama server yukarıdaki sorguyu sürekli çalıştırmak zorunda olduğu için (her sayfa oluşturmak bu sorguyu çalıştırmak zorunda olduğu için ) iyice yamuldu.

yardımlarınız için teşekkürler
 

troy

0
İyinet Üyesi
Katılım
13 Kasım 2005
Mesajlar
1,290
Reaction score
0
opensef binlerce gereksiz/geçersiz kayıt ta yapıyor zaman zaman opensef panelden en azından sayfalarca yer tutan geçersiz url'leri temizleyebilirsiniz. Ücretli Sef advance var birde, sanırım bu konuda daha tutumlu. hızlı sorgulama işini bilmiyorum bilen arkadaşlar yazarlar sanırım.
 

Turkmucit

0
İyinet Üyesi
Katılım
18 Ocak 2006
Mesajlar
1,523
Reaction score
0
PHP bilgim yok ama sorgu için genel bişey söyleyeyim.
Acaba bu sorgunun kullanımını sayfa isteklerine göre çalıştırıp iptal etsen nasıl olur.En basitinden bu forumda olduğu gibi iki arama arasında 1 dak olmalı.Gibi sizde
robotları , zaten çok yeni sorgulama yaptırmış olanları vs sistemi fazladan gereksiz yere yoranların isteklerini iptal edebilirsiniz.
Birde acaba datanızda günlük değişen kısımları sorgulatmasanız ? datanızı bilmiyorum ama mesela tüm günlere ait kayıtlar içinde bugüne ait şu özelliklerde şu sırada demek yerine
datanın o güne ait süzülmüş okpyasını başka tabloya atıp kalan sorguları bu tablo üzerinde yapsan.(bunu tamamen uydurdum hiç uymayabilir datanızı bilmediğimden )

Kolaylıklar dilerim..
 

trichnosis

0
İyinet Üyesi
Katılım
19 Şubat 2004
Mesajlar
390
Reaction score
1
opensef binlerce gereksiz/geçersiz kayıt ta yapıyor zaman zaman opensef panelden en azından sayfalarca yer tutan geçersiz url'leri temizleyebilirsiniz. Ücretli Sef advance var birde, sanırım bu konuda daha tutumlu. hızlı sorgulama işini bilmiyorum bilen arkadaşlar yazarlar sanırım.

geçersiz kayıtları phpmyadmin den sildim . opensef tarafında oluşturulmuş url lerden google amca 15.000 civarını indexledi , silmek pek işime gelmiyor o yüzden:)
 

Caesar

0
İyinet Üyesi
Katılım
5 Haziran 2006
Mesajlar
1,894
Reaction score
7
Merhaba

Elinizde

SELECT * FROM jos_opensef_sef WHERE published = '1'
AND valid = '1'
AND (direction IS lisanssız OR direction = '' OR direction = 'o')
AND (site_id IS lisanssız OR site_id = -1)
ORDER BY site_id DESC, published DESC, valid DESC, LENGTH(direction) DESC;

şeklinde bir sql sorgusu olduğunu , jos_opensef_sef tablosunda 20.000 tane kayıt olduğunu (ve bu kayıt sayısının günden güne arttığını , yıl sonunbda 150.000 gibi bir rakama ulaşacağını) düşünün ve bu sorgunun da seve seve çalıştırmak zorunda olduğunuz bir sorgu olduğunu düşününün .

Bu sorguyu serverda hızlandırmanın bir yolu varmıdır ? Pek fazla teknik bir bilgim yok ama atıyorum

*server da bu sorguyu günde bir sefer çalıştırıp isteyen uygulamalara öyle
yollamak
* server da bir şekilde bunun sürekli cache edip ben istediğimde güncellenmesini sağlamak

vs vs.

İşte benim problemim bu aklına bir şey gelen var mı ? ben zend opt. ve phpcache hızladırıcı kurdum ama server yukarıdaki sorguyu sürekli çalıştırmak zorunda olduğu için (her sayfa oluşturmak bu sorguyu çalıştırmak zorunda olduğu için ) iyice yamuldu.

yardımlarınız için teşekkürler

bu sorguyu çalıştırdığında echo olan bölgeleri fputs yap ve hobele.html e yazdır. o gün boyunca herkese hobele.html i göster sayfa 00:00 olunca tekrardan çalıştır hobele.html yenilensin.
 

iyinet

Root
Admin
Hosting Firması
Katılım
2 Eylül 2002
Mesajlar
5,028
Reaction score
63
Konum
Sakarya
Merhaba

Elinizde

SELECT * FROM jos_opensef_sef WHERE published = '1'
AND valid = '1'
AND (direction IS lisanssız OR direction = '' OR direction = 'o')
AND (site_id IS lisanssız OR site_id = -1)
ORDER BY site_id DESC, published DESC, valid DESC, LENGTH(direction) DESC;

şeklinde bir sql sorgusu olduğunu , jos_opensef_sef tablosunda 20.000 tane kayıt olduğunu (ve bu kayıt sayısının günden güne arttığını , yıl sonunbda 150.000 gibi bir rakama ulaşacağını) düşünün ve bu sorgunun da seve seve çalıştırmak zorunda olduğunuz bir sorgu olduğunu düşününün .

Bu sorguyu serverda hızlandırmanın bir yolu varmıdır ? Pek fazla teknik bir bilgim yok ama atıyorum

*server da bu sorguyu günde bir sefer çalıştırıp isteyen uygulamalara öyle
yollamak
* server da bir şekilde bunun sürekli cache edip ben istediğimde güncellenmesini sağlamak

vs vs.

İşte benim problemim bu aklına bir şey gelen var mı ? ben zend opt. ve phpcache hızladırıcı kurdum ama server yukarıdaki sorguyu sürekli çalıştırmak zorunda olduğu için (her sayfa oluşturmak bu sorguyu çalıştırmak zorunda olduğu için ) iyice yamuldu.

yardımlarınız için teşekkürler

Bu sorgunun ne kadar tutarli olmasini istediginie gore su sekilde bir cozum onerebilirim.

Saatte bir calisacak bir cron job icine asagidaki islemi yapacak bir kod ekle:


drop table if exists jos_opensef_sef_hourly;

SELECT * FROM jos_opensef_sef WHERE published = '1'
AND valid = '1'
AND (direction IS lisanssız OR direction = '' OR direction = 'o')
AND (site_id IS lisanssız OR site_id = -1)
ORDER BY site_id DESC, published DESC, valid DESC, LENGTH(direction) DESC
into jos_opensef_sef_hourly;

Bu kodu 1 saat dolmasini beklemeden 1 kez calistir.

Bunun ardindan yukarida verdigin SQL i kod icinde su SQL ile degistir:

SELECT * FROM jos_opensef_sef_hourly;

Saatlik tablo istenilen bilgileri tutacagi icin uzerinde index yaratmaya veya filtre eklemeye (where) gerek yok. Adi uzerinde, saatlik tablo, her sayfa acildiginda calisacak kodu, saatte 1 (cron uzerinden) calistirip, CPU dan tasarruf edecek. Her sayfa acilisinda ise saatlik tablo okunacak.
 

nedium

0
İyinet Üyesi
Katılım
4 Şubat 2006
Mesajlar
212
Reaction score
0
sorgundaki where bloğunda birçok alan ismi geçiyor.
bu sorgu sql server tarafından çalıştırılırken bu alanların her biri için filtreleme ve ORDER BY ile sıralama yapıyor. Order by daki alan sayısının fazlalığı yüzünden, tablodaki kayıt sayısı arttıkça sorgunun çalışma süresi katlanarak artar.

bu süreyi kısaltmanın en doğru yöntemi index kullanmak. where ile filtrelediğin ve order by ile sıraladığın bütün alanlara secondary index tanımlarsan bu sorgunun çalışma süresinde farkedilir bir azalma olduğunu göreceksin.
 

Türkiye’nin ilk webmaster forum sitesi iyinet.com'da forum üyeleri tarafından yapılan tüm paylaşımlardan; Türk Ceza Kanunu’nun 20. Maddesinin, 5651 Sayılı Kanununun 4. maddesinin 2. fıkrasına göre, paylaşım yapan üyeler sorumludur.

Backlink ve Tanıtım Yazısı için iletişime geçmek için Skype Adresimiz: .cid.1580508955483fe5

Üst