Avatar billede misbruger Nybegynder
23. oktober 2005 - 14:08 Der er 3 kommentarer og
1 løsning

Optimerede struktur til søgning - MS Freetext Engine

Jeg skal til at lave en produkt database i et e-handels system.

Der kommer til at være ca 2-3 mill. produkter i systemet fordelt i n kategorier (ProductTypes).

Til produkterne knytter der sig en masse information af forskellig typer.
De vigtigste er som følger...
(Bruges til en "Quick search")
- Type fk-> ProductTypes.indeks
- Title varchar(250)
- ProductCreator varchar(250)
- ArticleNumber varchar(250)
(Bruges til advanced search)
- ProductPublisher varchar(250)
- MarkedDate datetime
- Language fk-> Languages.indeks
- Description varchar(2000)

Derudover findes der en masse forskellige data om de enkelte produkter, som kun er relevant ved produkt-detalje visning.
Disse er dog lagt ud i en selvstændig tabel og en associationstabel, for at holde den primære produkt tabel lille.

Endvidere findes der flere leverandører og dermed flere priser pr. produkt, hvor kunden altid skal tilbydes den laveste.

Alle produkter og priser bliver importerede i flade tekstfiler hver nat fra eksterne leverandører, og er derfor en forholdvis flydende størrelse. (Har selvf. taget højde for at tabllerne skal reindekseres hver nat efter importen)

Jeg havde tænkt mig at benytte Microsoft Freetext Search Enginge til at udfører søgninger. Hvad syntes du?

Søgningen udføres ved brug af Stored Proc. og skal sendes videre til et repræsentationslag ved brug af webservices gennem C#.

Søgningen skal holdes nede under 1 sek. Således at den samlede håndtering (fra ui -> db -> ui> maks tager 1-2 sek.
Søgningen skal kun vise 20 resultater ad gangen.

Jeg har ikke før arbejde med databaser af den størrelse hvor fritekst søgning er omdrejningspunktet for hele løsningen.
(Den primære måde at finde et produkt er gennem søgning)
Jeg syntes at have nogle problemer med at få en optimal strukture ud af min tabeller, og leder derfor efter nogle gode råd for at holde søgetiden nede.
Så sidder du derude og har en stor viden om db struktur og freetext searching ser jeg frem til en dialog.

Jeg har et par diagrammer over min "nuværende" struktur, hvis man ønsker at se dem for at få et bedre indblik.
Avatar billede misbruger Nybegynder
23. oktober 2005 - 14:26 #1
Lad mig f.eks stille et mere konkret spm.

Er det bedst at bygge EN tabel med alle data i, eller er det bedre at have flere tabeller, hvor den primære indholde de felter der kan søges, og efterfølgende joine dem med de andre tabller for at få fylddata, priser osv. ?

Hvis jeg holder mig til en tabel, vil der ca. komme 35 kolonner i tabellen.
Hvis jeg fordeler det på flere tabeller, kommer der ca. 5 tabeller, hvor den primære har ca. 10 kolonner.
Quick search...
I liste visningen ville skulle joine med ca. 3 tabeller, og i detalje visning med alle 5.

Min tanke er at det vil være optimal at lave en søgning på en tabel med få kolonner, smide resultatet ud i en temp tabel, og så efterfølgende joine med de data der er behov for (På de 20 resultater som kommer af en søgning).

Hvad syntes du/I ?
Avatar billede arne_v Ekspert
23. oktober 2005 - 18:23 #2
som tommelfinger regel bør du:
  - designe tabeller logisk udfra en model af virkeligheden
  - lade SQLServer selv optimere dine queries

altså hvis der er 1:1 relationer mellem de 5 tabeller så lav det til en tabel

hvis det er 1:M relationer så behold de 5 tabeller

hvis du beholder de 5 tabeller så lad SQLServer selv lave joins og ikke noget
med en temporær tabel

det er udgangspunktet

basal optimering består i at få sat de rette index på tabellen

men til at lave en high performance løsning kan det nogen gange være
nødvendigt at lave noget "mindre pænt"

men du laver altid den pæne løsning først og så tester du om performance
er acceptabel, hvis ja så behold den pæne model, hvis nej så begynder du
at eksperimentere lidt og måler hvad der faktisk forbedrer performance
Avatar billede arne_v Ekspert
31. december 2005 - 15:33 #3
OK ?
Avatar billede misbruger Nybegynder
02. januar 2006 - 01:24 #4
Hej Arne

Undskyld mit sene svar jeg havde glemt alt om det.

Takker for din deltagelse
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Computerworld tilbyder specialiserede kurser i database-management

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester