Re: Veri özeti, Like ile arama performans'ı

From: Volkan YAZICI <volkan(dot)yazici(at)gmail(dot)com>
To: Timu EREN <selamtux(at)gmail(dot)com>
Cc: pgsql-tr-genel(at)postgresql(dot)org
Subject: Re: Veri özeti, Like ile arama performans'ı
Date: 2005-11-27 22:07:23
Message-ID: 7104a7370511271407r3a32288dsac0571b926585f5a@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-tr-genel

Merhaba,

On 11/27/05, Timu EREN <selamtux(at)gmail(dot)com> wrote:
> select * from search_test where search_sum like '1__0017_______02__';

Eğer bir veritabanını bu şekilde kullanacaksanız hiç kullanmayın daha
iyi. Bu kesinlikle veritabanı mantığına aykırı bir hareket.

İlk önerim şu olacak: (Kolay ama ikinci önereceğim yönteme oranla daha
düşük performanslı.) Belli katagoriler için farklı tablolar yaratın.
Yani katagorizasyon yelpazesini biraz daha daraltın. Ve ek olarak, her
alan üstünde INDEX yaratın. Hatta hatta, çok sık tarama yaptığınız
alanları, birlikte INDEX'leyin. (Bu konu hakkında Devrim Bey daha
ayrıntılı bilgi verebilir.) Bir de contrib altında gelen tsearch2'ye
bakın. O sizin ihtiyacına göre biraz kalın gelecek ama elinizi
kirleterek istediğiniz büyüklüğü ölçekleyebilirsiniz.

İkinci önerim şu olacak: Gördüğüm kadarı ile yaptığınız işin
(R)DBMS'lik bir tarafı yok. Yani veritabanının kullanılma nedenlerinin
biraz dışına taşıyor sizinkisi. Hele ki belirttiğiniz büyüklükte bir
veri için istediğiniz performansı düşünürsek. Verinizi yukarıdaki
biçimde metin dosyalarında saklayın ve arama yapmak için piyasadaki
bir çok arama algoritmasından birini elinizden geldiği kadar low-level
olarak uyarlayın. Örneğin:

- http://en.wikipedia.org/wiki/Knuth-Morris-Pratt_algorithm
- http://en.wikipedia.org/wiki/Rabin-Karp_string_search_algorithm

(Olayın hayvanlık tarafı için, okuduğum bir kitabı önereyim: Handbook
of Exact String-Matching Algorithms. Garanti ederim konu hakkında
doyumsuz kalmayacaksınız.)

Son yöntem ile emin olun epey bir performans artışı yaşayacaksınız.
Hele bir de bu metin dosyasını tmpfs ile bellek üzerinde tutarsanız...

Peki ben bu yöntemde ya yeni bir kayıt eklemek istersem, ya da belirli
bir biçime uyanları silmek istersem, onun için de ayrı bir program mı
yazacağım diyebilirsiniz. Bu durumda, (ilgili verinin zırt pırt
değişmediğini varsayarak) asıl tüm katagorileri 1. önerimdeki gibi
veritabanında tutun, yaptığınız her değişiklikten sonra yazdığınız
RULE'lar ile aramanın asıl yapılacağı metin dosyası oluşturulsun.

Unutmadan, rakamlarınız bana çok astronomik geldi. Bence
oluşturduğunuz şablonda bir mantık hatası olması ihtimali yüksek.
Çünkü zannetmiyorum ki Google'ın AdSense'inde bile bu kadar satır
olsun.

İyi çalışmalar.

In response to

Responses

Browse pgsql-tr-genel by date

  From Date Subject
Next Message Devrim GUNDUZ 2005-11-28 13:45:03 PHP 5.1'de yeni PostgreSQL fonksiyonları...
Previous Message Volkan YAZICI 2005-11-27 21:47:45 Re: Case Conversion Fix for MB Chars