Avatar billede sjh Nybegynder
24. april 2005 - 22:24 Der er 15 kommentarer og
1 løsning

Søge index

Hvordan vil man lave et søge index på en stor datamægte ??

Jeg vil prøve om jeg kan lave en søgemaskine som google :D men der må være en smart måde at søge så stor da datamægte på..

Jeg har prøvet at lave en lille database med "Random Access" i VB.. med 200.0000 records.. den er også hurtig.. men ikke når man skal tjekke 200.0000 strings.. med fx. If xx = yy Then

Jeg ved godt at det er "C/C++" kategori.. men skal bare have noget info.. og gerne på dansk :D
Avatar billede arne_v Ekspert
24. april 2005 - 22:29 #1
de klassiske in memory løsninger er:
  binære træer
  hash tabeller

de klassiske on disk løsninger er:
  træ index
  hash index

Hvad skal du kode det i VB6, VB.NET, C++ ?

In memory eller on disk ?
Avatar billede sjh Nybegynder
24. april 2005 - 22:33 #2
Ja lige nu har jeg lave en lille database som file hvor jeg bruger Get.. record men ved ikke om det er smart at smide 200.0000 records.. i memory :D det skal kodes i vb og eller PowerBSIC
Avatar billede sjh Nybegynder
24. april 2005 - 22:34 #3
Visual Basic 6 :D
Avatar billede sjh Nybegynder
24. april 2005 - 22:38 #4
Jeg har prøvet med API -> CreateFile(.. FILE_FLAG_RANDOM_ACCESS ..) men kan ikke få det til at virke når jeg bruger "FILE_FLAG_RANDOM_ACCESS" :(
Avatar billede sjh Nybegynder
24. april 2005 - 22:41 #5
arne_v hvordan virke:
  træ index
  hash index
Avatar billede arne_v Ekspert
24. april 2005 - 22:42 #6
Hvormange records du kan have i memory afhænger jo af hvor store records
er og hvor meget memory du har at bruge til formålet.

Du bør nok kunne få CreateFile FILE_FLAG_RANDOM_ACCESS til at virke, men du
skal jo vær eklar over at det er bare random access til bytes. Der er et
stykke vej fra det til en database.
Avatar billede arne_v Ekspert
24. april 2005 - 22:47 #7
træ index:

du har nogle data blokke og nogle index blokke

en data blok består af et antal records

en index blok består af et antal key values med tilhørende adresser

du kan enten have en fil med både alle index og alle data blokke eller
du kan have en fil meddata blokke og en fil med index blokke

en entry i en index blok kan enten pege på en anden index blok eller på
en record i en data blok

du skal finde "Arne" i databasen

du starter med at læse rod index blokken som ligger på et kendt sted i filen

der finder du "A" og ser at den peger på en index blok som er blok nummer 437

du læser nu den og finder "Arne" som peger på en data blok som er blok nummer 211
record 3

nu læser du den blok og fisker den rigtige record ud
Avatar billede sjh Nybegynder
24. april 2005 - 22:57 #9
når sådan.. :) hvad gør jeg så hvis jeg skal søge på fx. "Arne Code C/C++" men de 3 ord ikke står efter hinanden??
Avatar billede arne_v Ekspert
24. april 2005 - 23:07 #10
Du kan godt søge på noget med mellemrum i.

Hvis det ikke er en eksakt streng, så skal man have et index hvor de enkelte ord
er indexeret og så finde man records for alle ordene og vælger kun de records
som optræder for alle ordene.
Avatar billede arne_v Ekspert
24. april 2005 - 23:08 #11
Jeg har iøvrigt noget C++ kode til sådan noget (både B-trees og fulltext) men
det kræver meget kode.

Normalt vil man idag bare bruge en færdig database.
Avatar billede sjh Nybegynder
24. april 2005 - 23:17 #12
Ja.. en færdig database (mysql) :D når men nu tror jeg at jeg har fået den info jeg søgte efter.. :D kan du ikke lige smide et svar ;)
Avatar billede arne_v Ekspert
24. april 2005 - 23:24 #13
svar
Avatar billede arne_v Ekspert
24. april 2005 - 23:25 #14
Hvis du kigget lidt på de 2 link ovenfor vil du se at det er et stort emne.
Avatar billede sjh Nybegynder
24. april 2005 - 23:27 #15
Ja det kan jeg se.. men det betyder ikke noget.. det skal da afprøves.. :D takker endnu en gang for hjælpen :-)
Avatar billede segmose Nybegynder
29. april 2005 - 10:32 #16
Bucket search er også en god mulighed, du laver en X-dimensional tabel med de X første tegn som index, fx. X=2 og du søger på Arne T['a']['r'] givene en pointer til en list med alle ord der begynder med "ar", sorteret f.ex. i et B-tree som du så finder arne i, så gentager du samme søgning på de andre ord og kombinere de 3 lister så kun fælles resultaterne kommer frem.
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
Kurser inden for grundlæggende programmering

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