08. januar 2005 - 15:51Der er
17 kommentarer og 3 løsninger
ASP.NET/C# og MSSQL
Hej,
Jeg søger en webhotel host der har overstående, men kan kun finde nogle der tager 1000 million kroner. Det er sådan set bare til noget test for sjov etc. for at komme igang, så jeg er ikke intesseret i at betale mange penge for det før jeg bliver rigtig god til det.
Ja, meget................ for en privat person og når det kun er til sådan lidt test etc... så er det meget ja
Er der gode muligheder for at bruge MySQL så, altså nemt og god preformance..... altså med at connecte... for så må det blive aktuelt. Hvordan connecter den, for der er vel ikke build-in MySQL support i .NET, har brugt ByteFX fra C# før....
Skal man så over i noget ODBC ting... og har du lige et par linier om opsætning der.
Der er flere af de store asp.net neards som bruger dem blandt andet http://www.wilsondotnet.com Jeg syntes selve sitet kører fint nok.
Jeg prøvede lige at downloade en zip fil fra hans hjemmeside den kunne jeg hente med 20KB/sec... det er ikke helt godt. Jeg prøvede lige efter fra et website som ligger hos www.Azero.dk og der kunne jeg hente med min maks. 400KB/sec
"MS SQL er meget hurtigere end MySql gennem ByteFx eller ODBC."
Det synes jeg er noget af et postulat.
Al sund logik siger at MySQL med MyISAM tabeller bør være noget hurtigere end SQLServer.
Og jeg lavede så en lille test. Resultatet er her:
MySQL MyISAM : INSERT 100000 record in 13828 milliseconds MySQL InnoDB (1 transaction per INSERT) : INSERT 100000 record in 2696796 milliseconds MySQL InnoDB (1 transaction all INSERT) : INSERT 100000 record in 13578 milliseconds MS SQLServer (1 transaction per INSERT) : INSERT 100000 record in 267140 milliseconds MS SQLServer (1 transaction all INSERT) : INSERT 100000 record in 13703 milliseconds
Konklusionen er: - MySQL MyISAM er hurtigere end MS SQLServer - MS SQLServer er hurtigere end MySQL InnoDB
(100000 INSERT i en 1 tx betragter jeg ikke som et specielt relevant resultat)
Hvis nogen synes at det er langsomt: PC'ern er 2.5 år gammel og disken er 5.5 år gammel.
Man kan altid diskutere om benchmarks er gode eller ej. Mit eksmepel er en helt simpel INSERT.
Her er koden hvis nogen vil selv prøve:
using System; using System.Data; using System.Data.SqlClient; using ByteFX.Data.MySqlClient;
class MainClass { public const int N = 100000; public static void Main(string[] args) { TestMySqlMyIsam(); TestMySqlInnoDbSingle(); TestMySqlInnoDbAll(); TestSqlServerSingle(); TestSqlServerAll(); } private static void TestMySqlMyIsam() { MySqlConnection con = new MySqlConnection("Database=Test;Data Source=localhost;User Id=;Password="); con.Open(); MySqlCommand cre = new MySqlCommand("CREATE TABLE m (id INTEGER PRIMARY KEY, val VARCHAR(50)) TYPE=MYISAM", con); cre.ExecuteNonQuery(); long t1 = DateTime.Now.Ticks; for(int i = 0; i < N; i++) { MySqlCommand ins = new MySqlCommand("INSERT INTO m VALUES(" + i + ",'Dette er en TestMySql')", con); ins.ExecuteNonQuery(); } long t2 = DateTime.Now.Ticks; MySqlCommand drp = new MySqlCommand("DROP TABLE m", con); drp.ExecuteNonQuery(); con.Close(); Console.WriteLine("MySQL MyISAM : INSERT " + N + " record in " + (t2-t1)/10000 + " milliseconds"); } private static void TestMySqlInnoDbSingle() { MySqlConnection con = new MySqlConnection("Database=Test;Data Source=localhost;User Id=;Password="); con.Open(); MySqlCommand cre = new MySqlCommand("CREATE TABLE m (id INTEGER PRIMARY KEY, val VARCHAR(50)) TYPE=INNODB", con); cre.ExecuteNonQuery(); long t1 = DateTime.Now.Ticks; for(int i = 0; i < N; i++) { MySqlTransaction tx = con.BeginTransaction(); MySqlCommand ins = new MySqlCommand("INSERT INTO m VALUES(" + i + ",'Dette er en TestMySql')", con); ins.Transaction = tx; ins.ExecuteNonQuery(); tx.Commit(); } long t2 = DateTime.Now.Ticks; MySqlCommand drp = new MySqlCommand("DROP TABLE m", con); drp.ExecuteNonQuery(); con.Close(); Console.WriteLine("MySQL InnoDB (1 transaction per INSERT) : INSERT " + N + " record in " + (t2-t1)/10000 + " milliseconds"); } private static void TestMySqlInnoDbAll() { MySqlConnection con = new MySqlConnection("Database=Test;Data Source=localhost;User Id=;Password="); con.Open(); MySqlCommand cre = new MySqlCommand("CREATE TABLE m (id INTEGER PRIMARY KEY, val VARCHAR(50)) TYPE=INNODB", con); cre.ExecuteNonQuery(); long t1 = DateTime.Now.Ticks; MySqlTransaction tx = con.BeginTransaction(); for(int i = 0; i < N; i++) { MySqlCommand ins = new MySqlCommand("INSERT INTO m VALUES(" + i + ",'Dette er en TestMySql')", con); ins.Transaction = tx; ins.ExecuteNonQuery(); } tx.Commit(); long t2 = DateTime.Now.Ticks; MySqlCommand drp = new MySqlCommand("DROP TABLE m", con); drp.ExecuteNonQuery(); con.Close(); Console.WriteLine("MySQL InnoDB (1 transaction all INSERT) : INSERT " + N + " record in " + (t2-t1)/10000 + " milliseconds"); } private static void TestSqlServerSingle() { SqlConnection con = new SqlConnection(@"server=ARNEPC2\ARNEPC2RUN;Integrated Security=SSPI;database=TestMSDE"); con.Open(); SqlCommand cre = new SqlCommand("CREATE TABLE m (id INTEGER PRIMARY KEY, val VARCHAR(50))", con); cre.ExecuteNonQuery(); long t1 = DateTime.Now.Ticks; for(int i = 0; i < N; i++) { SqlTransaction tx = con.BeginTransaction(); SqlCommand ins = new SqlCommand("INSERT INTO m VALUES(" + i + ",'Dette er en TestMySql')", con); ins.Transaction = tx; ins.ExecuteNonQuery(); tx.Commit(); } long t2 = DateTime.Now.Ticks; SqlCommand drp = new SqlCommand("DROP TABLE m", con); drp.ExecuteNonQuery(); con.Close(); Console.WriteLine("MS SQLServer (1 transaction per INSERT) : INSERT " + N + " record in " + (t2-t1)/10000 + " milliseconds"); } private static void TestSqlServerAll() { SqlConnection con = new SqlConnection(@"server=ARNEPC2\ARNEPC2RUN;Integrated Security=SSPI;database=TestMSDE"); con.Open(); SqlCommand cre = new SqlCommand("CREATE TABLE m (id INTEGER PRIMARY KEY, val VARCHAR(50))", con); cre.ExecuteNonQuery(); long t1 = DateTime.Now.Ticks; SqlTransaction tx = con.BeginTransaction(); for(int i = 0; i < N; i++) { SqlCommand ins = new SqlCommand("INSERT INTO m VALUES(" + i + ",'Dette er en TestMySql')", con); ins.Transaction = tx; ins.ExecuteNonQuery(); } tx.Commit(); long t2 = DateTime.Now.Ticks; SqlCommand drp = new SqlCommand("DROP TABLE m", con); drp.ExecuteNonQuery(); con.Close(); Console.WriteLine("MS SQLServer (1 transaction all INSERT) : INSERT " + N + " record in " + (t2-t1)/10000 + " milliseconds"); } }
"Opret en testkonto og prøv ASP .NET og MSSQL kvit og frit i 3 måneder. Er du ikke interesseret i tegne abonnement efter prøveperioden, behøver du ikke foretage dig noget, idet din testkonto blot lukkes automatisk efter udløb."
Mener der flere udbydere med lignende tilbud. Jeg oprettet en demo-konto, men fik kun testet at det der var hul igennem før jeg valgte ASP.NET og MySQL hos web10.
<<Og hvad vil du konkludere udfra det ? <<At din ISP har en hurtigere forbindelse til Azero's ISP end til USA ? Præcis, you got my point... placering af server betyder rigtig meget, derfor ville jeg altid selv vælge et dansk webhotel hvis jeg ville få mange besøgende fra danmark
MS SQL vs MySql. Jeg ved bare at når jeg arbejder med MS SQL via stored procedure så går det stærkt. Og der findes en hel del flere kode eksempler i bøger og på nettet angående MS SQL og asp.net
Hvis man bruger den mysql connector, er det jo præcis samme features man har ( er ikke helt sikker men tæt på ) så skulle det være en smal sag at oversætte fra SqlConnection til MySqlConnection :-) Ville nu også helst have dansk, da mine besøgende nok ville komme derfra hvis jeg engang fik lavet et site.
Jeg vil tillade mig at nævne en udbyder mere, der har .NET og MySQL. Jeg er selv ikke kunde der, men de kan verificere denne udtalelse fra hjemmesiden:
"På Wendt-net finder man ikke en FAQ / OSS fordi der ikke findes " Ofte Stillede Spørgsmål " Det er dårlig servise at men som kunde skal læse 15 - 20 spørgsmål og svar igennem for at finde det der lige ligner det problem man har nu.
Nej, send en mail eller ring, og få problemet løst, om ikke med det samme, så meget hurtigt."
Dette til forskel fra bl.a Web10 og B-one som jeg har erfaringer med.
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.