Re: bitstring ya da numerik tur uzerinde "bit count" alabilmek

From: Volkan YAZICI <yazicivo(at)ttnet(dot)net(dot)tr>
To: Kerem Hadimli <wastiee(at)gmail(dot)com>
Cc: pgsql-tr-genel(at)postgresql(dot)org
Subject: Re: bitstring ya da numerik tur uzerinde "bit count" alabilmek
Date: 2006-12-04 18:31:38
Message-ID: 20061204183138.GD1356@alamut
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-tr-genel

On Dec 04 08:15, Kerem Hadimli wrote:
> On 12/4/06, Volkan YAZICI <yazicivo(at)ttnet(dot)net(dot)tr> wrote:
> > SELECT ...
> > FROM urunler
> > WHERE flags & 10110000...0000 = 1011000...0000 OR -- A, C, D için
> > ((flags | 1011) >> 296) <> 0 -- A veya C veya D için
> > ORDER BY ((flags | 1011) >> 296)
>
> Sanirim yanlis anlasilabilecek bir ornek verdim. ORDER BY <bitstring>
> yaptigimiz zaman, A'ya, B'den daha fazla oncelik veriliyor, halbuki
> elimdeki durumda A ile B nin birbirlerine gore onceligi yok (yani,
> kullanicinin A C D istegine uygun bulunan sonuclarda, A C ile C D nin
> siralamasinin onemi yok, ama tek basina A 'nin, A C 'den de C D 'den
> de sonra gelecegi kesin)

Anladım demek istediğinizi. Evet, o zaman verilen bit kümesi içindeki
1'lerin sayımı gerekli gibi gözüküyor. (Ben hala bunub farklı bir veri
yapı ile daha kolay yapılıp yapılamaycağını düşünüyorum fakat... Şu an
kafam difüzyon denklemleri ile yoğun olarak meşgul. Aklıma bir şeyler
gelirse listeye yazarım. Gerçi IMMUTABLE bir fonksiyonla saydırdığımız
1'ler üzerinde INDEX yapmak epey kolay ve efektif bir iş.)

> Index'leme (ve aslinda, buna bagli olarak partitioning) kisminda,
> kullanicidan gelecek arama kriterleri belirsizken, bu ozelliklerden
> faydalanmam mumkun mu?
>
> Sonucta, bitsayisi(urun ozellikleri) uzerinden indeksleme yapilabilir
> (bitsayisi(x) immutable ve dedigimiz bit sayma islemini yapan bir
> fonksiyon), fakat siralamalar, kullanicinin istegine uygunluk
> acisindan oldugu icin, bitsayisi(urun ozellikleri & istek) 'e gore bir
> indeksleme yapmak, istek belirsiz oldugu icin mumkun gorunmuyor.

İşte ben de bu sebeple partitioning önerdim. Kullanıcı tarafından
gelecek aramalar deterministik olmadığı için onlar üzerinde bir
INDEX'leme yapmak karanlığa taş atmaktan farksız olur. Ama
partitioning ile RAM'e sığacak büyüklükte tablolar oluşturmayı
başarırsanız INDEX'in getireceği hıza, tabloları RAM'de işleyerek
ulaşabilirsiniz.

> Bunun nasil bir cikisi olabilir (belki, tum isteklere gore olmasa
> bile gelebilecek potansiyel isteklere gore optimizasyon
> saglayabilecek assumptionlar kullanarak) ?

Bu her ne kadar değindiğim gibi deterministik olmasa da, Karl Marx'ın
insan tavırlarının benzerliği üzerine ileri sürdüğü fikirleri göz
önünde bulundurarak, kullanıcıların çoğunun birbirine benzer sorgular
yapabileceğini söyleyebiliriz. :-) Örneğin sorgulanma olasılığı yüksek
flag değerleri için ayrıyetten 3-4 tane INDEX oluşturmak kimsenin
canını yakmasa gerek.

Aslında üşenmeden bakmak lazım: Piyasadaki benzer yazılımlar bu işi
nasıl başarmış?

İyi çalışmalar.

In response to

Responses

Browse pgsql-tr-genel by date

  From Date Subject
Next Message Adnan DURSUN 2006-12-04 21:34:56 Re: bitstring ya da numerik tur uzerinde "bit count" alabilmek
Previous Message Kerem Hadimli 2006-12-04 18:15:28 Re: bitstring ya da numerik tur uzerinde "bit count" alabilmek