Kom ihåg mig?
Home Menu

Menu


MySql bulk insert, laddnings problem

Ämnesverktyg Visningsalternativ
Oläst 2015-03-30, 13:29 #1
naak2803 naak2803 är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2011
Inlägg: 767
naak2803 naak2803 är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2011
Inlägg: 767
Question MySql bulk insert, laddnings problem

Hej,

Jag håller på att göra en bulk insert med ca 50,000 poster.

Kodsnutten för insert ser ut på detta vis.

Kod:
string strSql = "INSERT INTO wc_list (id, name, company, orgNo, address, postalCode, city, phoneNo, carrier, status, projectId) VALUES(id, @A, @B, @C, @D, @E, @F, @G, @H, @I, @J)";

        string strConnectionString = ConfigurationManager.ConnectionStrings["MySQL"].ConnectionString;
        MySqlConnection sqlConn = new MySqlConnection(strConnectionString);
        MySqlCommand cmd = new MySqlCommand(strSql, sqlConn);
        sqlConn.Open();

        foreach (DataRow r in dt.Rows)
        {
            cmd1 = sqlConn.CreateCommand();
            cmd.CommandText = strSql;
            cmd.Parameters.AddWithValue("@A", r[0]);
            cmd.Parameters.AddWithValue("@B", r[1]);
            cmd.Parameters.AddWithValue("@C", r[2]);
            cmd.Parameters.AddWithValue("@D", r[3]);
            cmd.Parameters.AddWithValue("@E", r[4]);
            cmd.Parameters.AddWithValue("@F", r[5]);
            cmd.Parameters.AddWithValue("@G", r[6]);
            cmd.Parameters.AddWithValue("@H", r[7]);
            cmd.Parameters.AddWithValue("@I", "0");
            cmd.Parameters.AddWithValue("@J", iProjectId);
            
            cmd.ExecuteNonQuery();
        }

        sqlConn.Close();
Problemet jag upplever är att vid, cmd.ExecuteNonQuery(), so ligger webläsaren och bara snurrar medans alla poster håller att insertas. Vilket kan bli jobbigt, vill kunna hålla på med andra saker samtidigt.

Just nu gör jag så att jag klickar på "INSERT-knappen" och sedan trycker jag direkt på ESC. Då kan jag surfa runt på sidan medans inserten håller på.

hur kan jag åstadkomma samma effekt programmatiskt? håller på att utveckla i c# .NET

tacksam för svar.
naak2803 är inte uppkopplad   Svara med citatSvara med citat
Oläst 2015-03-30, 13:52 #2
coredevs avatar
coredev coredev är inte uppkopplad
Bara ett inlägg till!
 
Reg.datum: Sep 2007
Inlägg: 1 554
coredev coredev är inte uppkopplad
Bara ett inlägg till!
coredevs avatar
 
Reg.datum: Sep 2007
Inlägg: 1 554
Det beror på. En sätt är att lägga arbetet i en tråd och sedan hämta tillbaka status med SignlarR. Om det är Azure du utvecklar i så har du ju möjlighet att lägga dina arbeten i en kö som du sedan betar av med en worker-roll.
coredev är inte uppkopplad   Svara med citatSvara med citat
Oläst 2015-03-30, 17:10 #3
yakuzaemmes avatar
yakuzaemme yakuzaemme är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2012
Inlägg: 773
yakuzaemme yakuzaemme är inte uppkopplad
Mycket flitig postare
yakuzaemmes avatar
 
Reg.datum: Jun 2012
Inlägg: 773
Kör alla inserts i en och samma query. Dvs INSERT INTO table (, , ,) VALUES (val1,val2), (val3, val4) etc.

Tror max ligger på 500 i en och samma query, detta går att ändra men annars kan du bara köra olika batchar om 500 åt gången.
yakuzaemme är inte uppkopplad   Svara med citatSvara med citat
Oläst 2015-03-30, 17:30 #4
Knockout Knockout är inte uppkopplad
Nykomling
 
Reg.datum: Aug 2014
Inlägg: 12
Knockout Knockout är inte uppkopplad
Nykomling
 
Reg.datum: Aug 2014
Inlägg: 12
Som ovan säger, kör i batchar.
Istället för att köra 50.000 frågor mot databasen blir det bara 100 vilket inte bör ta många sekunder att köra.
Knockout är inte uppkopplad   Svara med citatSvara med citat
Oläst 2015-03-30, 17:33 #5
yakuzaemmes avatar
yakuzaemme yakuzaemme är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2012
Inlägg: 773
yakuzaemme yakuzaemme är inte uppkopplad
Mycket flitig postare
yakuzaemmes avatar
 
Reg.datum: Jun 2012
Inlägg: 773
Såg nu att det rörde sig om 50k poster. Ändra max_allowed_packet och sätt in 10.000 om gången, bör gå kvickt
yakuzaemme är inte uppkopplad   Svara med citatSvara med citat
Oläst 2015-03-30, 20:25 #6
x264 x264 är inte uppkopplad
Flitig postare
 
Reg.datum: Dec 2013
Inlägg: 342
x264 x264 är inte uppkopplad
Flitig postare
 
Reg.datum: Dec 2013
Inlägg: 342
Jag hade använt mig av en insert med en select:


INSERT INTO users (username, password, firstname, lastname) SELECT username, salted_password, firstname, lastname FROM registered_users

Gjort detta enkelt med över 600 tusen poster.

Lycka till!
x264 är inte uppkopplad   Svara med citatSvara med citat
Oläst 2015-04-08, 12:50 #7
naak2803 naak2803 är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2011
Inlägg: 767
naak2803 naak2803 är inte uppkopplad
Mycket flitig postare
 
Reg.datum: Jun 2011
Inlägg: 767
tack för alla som försökt hjälpa, testade alla dessa ovan, med det tog alltför långt tid att göra en insert... ca 60 sek... :S

Lyckades dock lösa problemet med denna kod, för er som är intresserade. Jag skapar en tillfällig csv fil och därefter gör jag en batch-insert från filen tilkl databasen.



Kod:
        string strConnectionString = ConfigurationManager.ConnectionStrings["MySQL"].ConnectionString;

        using (var conn = new MySqlConnection(strConnectionString))
        {
            var bl = new MySqlBulkLoader(conn)
            {
                TableName = "wc_list",
                FieldTerminator = "|",
                LineTerminator = "\r\n",
                FileName = getCSVfile(),
                NumberOfLinesToSkip = 0,
                Columns = { "name", "company", "orgNo", "address", "postalCode", "city", "phoneNo", "carrier", "status", "projectId", "other" }
            };
            var numberOfInsertedRows = bl.Load();
        }
naak2803 är inte uppkopplad   Svara med citatSvara med citat
Svara


Aktiva användare som för närvarande tittar på det här ämnet: 1 (0 medlemmar och 1 gäster)
 

Regler för att posta
Du får inte posta nya ämnen
Du får inte posta svar
Du får inte posta bifogade filer
Du får inte redigera dina inlägg

BB-kod är
Smilies är
[IMG]-kod är
HTML-kod är av

Forumhopp


Alla tider är GMT +2. Klockan är nu 15:10.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson
 
Copyright © 2017