Avatar billede nielsbrinch Nybegynder
03. februar 2004 - 23:42 Der er 10 kommentarer og
1 løsning

Benyttelse af MySqlDataStore

Fortsættelse af en andens spørgsmål: http://www.eksperten.dk/spm/458210

Hvordan skal den MySqlDataStore tilgås?

Skal brugerne have en instans hver? Skal de deles om den samme instans?

Hvis de skal have en instans hver, kommer det så ikke til at fylde skrækkeligt og være ineffektivt, med tusindvis af brugere online samtidig?

Hvis de deles om den samme instans, hvad sker der så, hvis to brugere forsøger at tilslutte til databasen samtidig?
Avatar billede burningice Nybegynder
04. februar 2004 - 10:19 #1
umiddelbart vil det nemmeste da være at oprette en instans hver gang du skal bruge den... det vil jo være det samme som at oprette en instans af MySqlConnection uden brug af ovenstående implementering, hvilken man da også normalt vil gøre.

Hvis du ikke har lyst til det kan du implementere et Singleton-pattern... ved dog ikke hvordan det vil fungere i det sidste scenario du nævner, med to samtidige connections på samme MySqlDataStore
Avatar billede nielsbrinch Nybegynder
04. februar 2004 - 10:30 #2
Når det er præcis den samme metode man vil udføre igen og igen (Query eller Update), virker det helt klart som noget overflødigt at lave nye instanser hele tiden - det bør kunne fungere optimalt med en statisk metode på en klasse.
Avatar billede burningice Nybegynder
04. februar 2004 - 10:46 #3
men du skal jo oprette en ny instans af MySqlConnection, så hvis du laver alle metoderne statiske, vil du så oprette en MySqlConnection i selve metoderne istedet?
Avatar billede nielsbrinch Nybegynder
04. februar 2004 - 10:59 #4
Ja, hvorfor ikke? Jeg har lige lavet en hurtig kladde:

public class Database
{
    private static string conString = "";

    public static void Init(string type, string datasource,
                    string username, string password) {
        if (type.Equals("mysql")) {
            conString = "Provider=MySQLProv;Data Source="+datasource+";User Id="+username+";Password="+password+";";
        }
    }

    public static DataSet Query(string sql, DataSet ds) {
        if (ds == null) {
            ds = new DataSet();
        }
        OleDbConnection con = new OleDbConnection(conString);
        OleDbCommand command = new OleDbCommand(sql,con);           
        OleDbDataAdapter adapter = new OleDbDataAdapter();
        con.Open();
        adapter.SelectCommand = command;
        adapter.Fill(ds, "Test");
        // her skal der være noget mere hurlumhej
        con.Close();
        return ds;
    }
}
Avatar billede nielsbrinch Nybegynder
04. februar 2004 - 10:59 #5
Så køres Init selvfølgelig i Application_Start
Avatar billede burningice Nybegynder
05. februar 2004 - 11:22 #6
måske fordi, at så er du da lige vidt... der bliver jo stadig oprettet 1000'vis af Connection-objecter
Avatar billede nielsbrinch Nybegynder
05. februar 2004 - 11:32 #7
Njah, men de hentes vel fra den samme ConnectionPool ikke, så de oprettes ikke rent faktisk?

Forskellen er at der ikke oprettes 1000-vis af klasser oveni, til at håndtere de tusindvis af Connection-objekter.
Avatar billede burningice Nybegynder
05. februar 2004 - 11:53 #8
der er da vist noget du har misforstået... hver gang du skriver

new *Connection bliver objectet OPRETTET, pooling eller ej. Der pooling går ind og er smart er når du kalder Open() og Close().

Istedet for rent fysisk at lukke fobindelsen når man kalder Close(), så bliver den bare smidt over i en pool, så næste gang der bliver kaldt Open() bliver der tjekket i poolen om der er en åben connection i forvejen man kan bruge.

Du kan godt implementere en class-pool på f.eks. *Connection, jeg kan bare ikke forestille mig at det skulle give nogen perfomance-mæssig fordel.
Avatar billede nielsbrinch Nybegynder
05. februar 2004 - 12:01 #9
Ahh ja, du har ret. Så er min løsning ikke særligt smart, idet der oprettes nye objekter hele tiden, i stedet for at oprette dem én gang pr. bruger og så bare åbne og lukke dem.
Avatar billede nielsbrinch Nybegynder
08. februar 2004 - 15:39 #10
Du er velkommen til at komme med et svar, cyberfessor.
Avatar billede burningice Nybegynder
08. februar 2004 - 17:17 #11
hehe.. fair nok :)
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