Avatar billede websam Nybegynder
28. oktober 2006 - 12:18 Der er 14 kommentarer og
1 løsning

Hastighed Database vs. Arraylist ?

Hejsa,

Jeg sidder og tænker lidt over hvad der er hurtigst :

1. At hente en record i databasen med Select * from tabel where id = 12

2. At søge igennem en array liste jeg har lagt i cache med samtlige records fra tabellen i databasen.

Hvad er din erfaring/holdning til dette ???

/Websam
Avatar billede timelord Nybegynder
28. oktober 2006 - 12:48 #1
Mon ikke array listen er den hurtigeste, med mindre du ændre dit * i din select sætning til i stedet at være det eller de felter du søger på.
Ved at vælge * skal den jo søge alle felter igennem.
Avatar billede websam Nybegynder
28. oktober 2006 - 12:48 #2
Jeg tænker noget i stil med at jeg har en metode i mit buisness lag der trækker alle records fra databasen ud i en arrayliste og smidder dem i cache. Ydermere har jeg en anden metode der søger i denne arrayliste efter en record med et bestemt id.

På den måde kan jeg undgå x antal kald til databasen, men om det belaster mere ved søgning igennem en arrayliste er jeg lidt i tvivl om.

/Websam
Avatar billede websam Nybegynder
28. oktober 2006 - 12:52 #3
Nu var den select komando bare et eksempel hvis jeg f.eks kun skal bruge Id, navn og email laver jeg "Select Id, navn, email from tabel" hvilket giver mindre fyld i arraylisten og samtidig mindre i cachen.

Men mener du at det er hurtigere at trække * frem for de rækker jeg vil bruge Id, nevn ect. ?

/Websam
Avatar billede timelord Nybegynder
28. oktober 2006 - 13:31 #4
Nej nej, det er hurtigere hvis du definere de felter du vil søge på.
Array listen burde være hurtigere, da alle data ligger i hukommelsen.
Avatar billede karsten_larsen Praktikant
28. oktober 2006 - 15:10 #5
men, så får den generelle belastning af serveren betydning. Det spiller vel også ind hvorvidt databasen befinder sig på sin egen server.
Avatar billede websam Nybegynder
28. oktober 2006 - 15:25 #6
Databasen ligger på serveren hvor siden køre. Og ret mig hvis jeg er galt på den, men cachen benytter sig af ram ikke sandt, eller er der andre ting der tærres på også ?

/Websam
Avatar billede websam Nybegynder
28. oktober 2006 - 15:37 #7
Typisk ligger jeg array's i cache 10 min til 1 time ad gangen afhænnigt af hvad det er der bruges på siden. Top 5 nyheder der vises på nærmest alle sider er længere i cache end f.eks. visning af en enkelt nyhed.

Men jeg må vel nærmest holde øje med brugen af ram på serveren for ordenligt at kunne danne mig et indtryk af det. Og måske endnu bedre benytte mig af garbage collection, så hvis en af jer ligger inde med noget om det er i velkommen til at smide et link eller 2 ;o)

/Websam
Avatar billede arne_v Ekspert
28. oktober 2006 - 15:59 #8
normalt vil memory access altid være hurtigere end disk access

hvis du tit skal slå op på id kan du bruge en Hashtable/Dictionary
(husk at de samme objekter godt kan være både i en Hashtable/Dictionary og en ArrayList/List)
Avatar billede websam Nybegynder
28. oktober 2006 - 16:47 #9
Men hvad skulle fordelen være ved at have det i Hashtable/Dictionary ?

/Websam
Avatar billede timelord Nybegynder
28. oktober 2006 - 16:52 #10
Hastigheden og du kan tilgå dem via dit ID
Avatar billede websam Nybegynder
28. oktober 2006 - 21:19 #11
Kunne en af jeg komme med et eksempel på det med hashtable i forhold til et array ?

/Websam
Avatar billede arne_v Ekspert
28. oktober 2006 - 22:06 #12
using System;
using System.Collections.Generic;

namespace E
{
    public class Person
    {
        private int id;
        private string name;
        private string address;
        public Person(int id, string name, string address)
        {
            this.id = id;
            this.name = name;
            this.address = address;
        }
        public int Id
        {
            get
            {
                return id;
            }
        }
        public string Name
        {
            get
            {
                return name;
            }
            set
            {
                name = value;
            }
        }
        public string Address
        {
            get
            {
                return address;
            }
            set
            {
                address = value;
            }
        }
        public override string ToString()
        {
            return ("[" + id + "," + name + "," + address + "]");
        }
    }
    public class PersonMultiContainer
    {
        private IList<Person> simpleList;
        private IDictionary<int,Person> mapFromId;
        private IDictionary<string,Person> mapFromName;
        public PersonMultiContainer()
        {
            simpleList = new List<Person>();
            mapFromId = new Dictionary<int, Person>();
            mapFromName = new Dictionary<string, Person>();
        }
        public void Add(Person p)
        {
            simpleList.Add(p);
            mapFromId.Add(p.Id, p);
            mapFromName.Add(p.Name, p);
        }
        public IList<Person> SimpleList
        {
            get
            {
                return simpleList;
            }
        }
        public Person LookupById(int id)
        {
            return mapFromId[id];
        }
        public Person LookupByName(string name)
        {
            return mapFromName[name];
        }
    }
    public class MainClass
    {
        public static void Main(string[] args)
        {
            PersonMultiContainer pmc = new PersonMultiContainer();
            pmc.Add(new Person(1, "Anders", "A vej #1"));
            pmc.Add(new Person(2, "Benny", "BB vej #2"));
            pmc.Add(new Person(3, "Christian", "CCC vej #3"));
            foreach(Person p in pmc.SimpleList)
            {
                Console.WriteLine(p);
            }
            Console.WriteLine(pmc.LookupById(3));
            Console.WriteLine(pmc.LookupByName("Benny"));
        }
    }
}
Avatar billede arne_v Ekspert
09. december 2006 - 23:40 #13
websam ?
Avatar billede websam Nybegynder
10. december 2006 - 18:58 #14
Jeg har ikke fået kigget mere på det med hashtabel, men smid et svar det plejer jo at virke de eksempler du laver ;o)

/Websam
Avatar billede arne_v Ekspert
10. december 2006 - 20:05 #15
ok
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
IT-kurser om Microsoft 365, sikkerhed, personlig vækst, udvikling, digital markedsføring, grafisk design, SAP og forretningsanalyse.

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