.NET & MySQL
8 отговора
555 прегледа
Re: .NET & MySQL
има при това не само един.
1. odbc.net
2. bytefx.mysql
3. mysqlprovidercs
4. corlab.mysql
степенувани по възможности, с изключение на последния, който е може би най-добър, но платен
1. odbc.net
2. bytefx.mysql
3. mysqlprovidercs
4. corlab.mysql
степенувани по възможности, с изключение на последния, който е може би най-добър, но платен
Re: .NET & MySQL
Можеш ли да дадеш някви примери как става манията демек как са ползват щото аз си качих .NET преди 2 дена и съм много бос...
Re: .NET & MySQL
Всичките са си нормални адо.нет провайдъри и се ползват точно както е дадено в документациятя и всички примери.
Трябва да прочетещ малко за адо.нет защото темата е сравнително обширна за един пост
Накратко процедурата е горе-долу следната ( естествено зависи какво точно ще правиш)
xxxConnection се създава с съотвтния Connection String
xxxCommand го закачащ за конкшъна и му слагаш query
може да направиш xxxDataAdapter който може да съьдава DataSet
може и направо от xxxCommand да вземеш xxxDataReader
навсякъде в примерите става въпрос за
SqlConnection, SqlCommand, SqlDataAdapter, SqlDataReader,
които са класовете за Sql Server
има и класове за ОлеДб
OleDbConnection, OleDbCommand... също се предлага стандартно
OdbcConnection, OdbcCommand.. идват с пакета одбц.нет
MySqlConnection, MySqlCommand.. са в ByteFx.MySql, Corlab.MySql
MySQLConnection, MySQLCommand... са в MySQLProviderCS
ето и линкове за доунлоад
odbc
sf.net/projects/mysqlnet - ByteFx.MySql
[линк]
Трябва да прочетещ малко за адо.нет защото темата е сравнително обширна за един пост
Накратко процедурата е горе-долу следната ( естествено зависи какво точно ще правиш)
xxxConnection се създава с съотвтния Connection String
xxxCommand го закачащ за конкшъна и му слагаш query
може да направиш xxxDataAdapter който може да съьдава DataSet
може и направо от xxxCommand да вземеш xxxDataReader
навсякъде в примерите става въпрос за
SqlConnection, SqlCommand, SqlDataAdapter, SqlDataReader,
които са класовете за Sql Server
има и класове за ОлеДб
OleDbConnection, OleDbCommand... също се предлага стандартно
OdbcConnection, OdbcCommand.. идват с пакета одбц.нет
MySqlConnection, MySqlCommand.. са в ByteFx.MySql, Corlab.MySql
MySQLConnection, MySQLCommand... са в MySQLProviderCS
ето и линкове за доунлоад
odbc
sf.net/projects/mysqlnet - ByteFx.MySql
[линк]
Re: .NET & MySQL
Пробвай и MySQLDriverCS [линк] - безплатен е. През odbc също става но е много по-бавно.
If you don't care where you are going any road will get you there
If you don't care where you are going any road will get you there
Re: .NET & MySQL
да де аз него имах пред вид с MySQLProviderCS
бързах и не можах да намеря точния линк.
искам да добава още няколко думи, защото и аз ползвам MySql и прекарах известно време в тестване и проучвание.
Внимавайте с MySQLDriverCS и ByteFX.Data.MySqlClient
и 2та са опен сорс проекти и в момента не са пълни имплементации, освен това има доста грешки.
бегъл поглед върху сорса им ( нали са опен сорс) показва:
0. И аз си мислех, че nativ драйвърите са по-бързи от odbc.net, но моите тестове показаха точно обратното. Не само, че в сегашните им версии не са, но odbc.net има ОГРОМНО предимство (в пъти ) в бързината. На пръв поглед е странно, но си има и логично обяснение, което ще опиша
1. MySQLDriverCS просто ползва ц апито, а ByteFX.Data.MySqlClient сокети. Т.е. MySQLDriverCS се води nativ само за заблуда на врага, разликарта м/у викането на nativ MySql функция, пред odbc функция не е особено голяма.
2. В MySQLDriverCS има недокументирани подводни камъни, например MySQLCommand.ExecuteReader(CommandBehavior) изобщо не е имплементиран метод и ако извикаш MySQLCommand.ExecuteReader(CommandBehavior.CloseConnection) очаквайки конкъшна да се затвори заедно с рийдъра, това естествено не става, както би трябвало и след няколко часа имаш няколкостотин отворени конекшъни
Като погледнах в сорса - му диреткно прехвърляне на топката към метода без параметър, поне да го бяха докуменирали.
3. Нито един от 2та не е годен за параметризирани заявки, понякога става, понякога не. Специално при MySQLDriverCS опитът за имплементирането на тази част от спецификацията е доста първобитен.
4. ByteFX.Data.MySqlClient отвреме на време просто си гърми, защото изпраща грешен нетуърк пакет.
5.MySQLDriverCS са посочили Development Status: 6 - Mature, което е бурен смях и прах в очите
ByteFX.Data.MySqlClient се води Beta, което по-близо до истината
Драйверът на crlab.com е добър и единствен, който може да се сравнява горе-долу по бързина с odbc.net, въпреки че и той при мен беше (малко) по-бавен.
Поради гореописаните причини, съвсем разбираемо в момента аз ползвам odbc.net За него поне е абсолютно сигурно че няма дупки в имплементацията и като викаш нещо знаеш какво ще стане.
Надявам се някой от опен сорс проектите да поузрее, да бъде имплементиран като хората и съвсем естевено да стане и по-бърз, както подгожда на nativ
драйвер за да мигрирам към него.
Като цяло ByteFX.Data.MySqlClient е в доста по-активно развитие, от последната версия на MySQLDriverCS , вече има 2 нови на ByteFX.Data.MySqlClient
Целите в развитието на ByteFX.Data.MySqlClient с по-големи ( той и сега си е доста по-напред с материала, няма да описвам подробно и без това стана роман ) и e официалният MySQL драйвер на проекта моно. Възлагам надеждите си на него.
Ако можех да ползвам Sql Server, щях да го направя. Иначе по-бързата и удобна MySql всъщност става камък на шията заради липсата ( към момента ) на подходящ драйвер, за разлика от Sql Server драйвъра, който предлага милиони предимства.
Всичко горенаписано са си лично мои наблюдения и заключения и не налагам на никой мнението си.
искам да добава още няколко думи, защото и аз ползвам MySql и прекарах известно време в тестване и проучвание.
Внимавайте с MySQLDriverCS и ByteFX.Data.MySqlClient
и 2та са опен сорс проекти и в момента не са пълни имплементации, освен това има доста грешки.
бегъл поглед върху сорса им ( нали са опен сорс) показва:
0. И аз си мислех, че nativ драйвърите са по-бързи от odbc.net, но моите тестове показаха точно обратното. Не само, че в сегашните им версии не са, но odbc.net има ОГРОМНО предимство (в пъти ) в бързината. На пръв поглед е странно, но си има и логично обяснение, което ще опиша
1. MySQLDriverCS просто ползва ц апито, а ByteFX.Data.MySqlClient сокети. Т.е. MySQLDriverCS се води nativ само за заблуда на врага, разликарта м/у викането на nativ MySql функция, пред odbc функция не е особено голяма.
2. В MySQLDriverCS има недокументирани подводни камъни, например MySQLCommand.ExecuteReader(CommandBehavior) изобщо не е имплементиран метод и ако извикаш MySQLCommand.ExecuteReader(CommandBehavior.CloseConnection) очаквайки конкъшна да се затвори заедно с рийдъра, това естествено не става, както би трябвало и след няколко часа имаш няколкостотин отворени конекшъни
Като погледнах в сорса - му диреткно прехвърляне на топката към метода без параметър, поне да го бяха докуменирали.
3. Нито един от 2та не е годен за параметризирани заявки, понякога става, понякога не. Специално при MySQLDriverCS опитът за имплементирането на тази част от спецификацията е доста първобитен.
4. ByteFX.Data.MySqlClient отвреме на време просто си гърми, защото изпраща грешен нетуърк пакет.
5.MySQLDriverCS са посочили Development Status: 6 - Mature, което е бурен смях и прах в очите
ByteFX.Data.MySqlClient се води Beta, което по-близо до истината
Драйверът на crlab.com е добър и единствен, който може да се сравнява горе-долу по бързина с odbc.net, въпреки че и той при мен беше (малко) по-бавен.
Поради гореописаните причини, съвсем разбираемо в момента аз ползвам odbc.net За него поне е абсолютно сигурно че няма дупки в имплементацията и като викаш нещо знаеш какво ще стане.
Надявам се някой от опен сорс проектите да поузрее, да бъде имплементиран като хората и съвсем естевено да стане и по-бърз, както подгожда на nativ
драйвер за да мигрирам към него.
Като цяло ByteFX.Data.MySqlClient е в доста по-активно развитие, от последната версия на MySQLDriverCS , вече има 2 нови на ByteFX.Data.MySqlClient
Целите в развитието на ByteFX.Data.MySqlClient с по-големи ( той и сега си е доста по-напред с материала, няма да описвам подробно и без това стана роман ) и e официалният MySQL драйвер на проекта моно. Възлагам надеждите си на него.
Ако можех да ползвам Sql Server, щях да го направя. Иначе по-бързата и удобна MySql всъщност става камък на шията заради липсата ( към момента ) на подходящ драйвер, за разлика от Sql Server драйвъра, който предлага милиони предимства.
Всичко горенаписано са си лично мои наблюдения и заключения и не налагам на никой мнението си.
Re: .NET & MySQL
Интересни резултати. В единия вариант имаш Приложение->Native Driver->libmysql.dll->DB, а в другия Прлижение->ODBC.NET->MyODBC->libmysql.dll->DB, което си е още едно ниво и би трябвало да забави допълнително. Ако искаш кажи как си тествал, да сравня при мен как ще мине :) Сървъра, на който тествам е с 1 GB памет, P4 2.4 Ghz, а работната станция е Athlon 2.1 Ghz с 512 MB., .Net Framework 1.1.
If you don't care where you are going any road will get you there
If you don't care where you are going any road will get you there
Re: .NET & MySQL
първо искам да кажа не претиндирам за изчерпателност
ето сорса на тестовата програмка
така ето и резултатите в къщи - локална mysql 4.0.15, атлон 2000, 256 ддр рам,
мисля че на сървъра няма да са различни като съотношение, затова не съм ги пускал
не поствам резултатите на другите 2ма "участници" защото бързам, но и 2та бяха по-бавни от одбц, най-добре е платеният CoreLab.MySql
Някои изводи:
1. разликата м/у нативна и одбц функция, принципно не е много голяма и в случая не играе решаваща роля.
основното, е че MySQLDriverCS е неузрял и не ползва оптимално апито. Дори и когато това стане
и изпревари одбц, разликата ще е пренебрежимо малка. Дали обаче изобщо някога ще стане по-добър от
одбц ще видим.
Основно развитие е момента търпи ByteFX.Data.MySqlClient, който от своя страна не ползва libmysql.dll и по
твоята схема картинката е
Прлижение->Native Driver->DB което означава, че има потенциал да се оптимизира, дано.
2. Дори и разликата м/у Native драйверите и одбц да беше същата в полза на Native, аз лично пак нямаше да ги ползвам,
защото в момента те са пълни c мини, дупки и неизвестности в имплементациите си и просто не може да се разчита на тях.
Какво значение има бързината, като заявката изобщо не може да се изпълни заради грешка в драйвера?
Когато почнат да се държат стабилно и изпълняват спецификациите и евентуално станат по-бързи
съм готов веднага да мигрирам.
ако някой получи други резултати, има допълнения към този тест или предложи друг
ще ми е интересно да прочета нещо по темата
ето сорса на тестовата програмка
using System;
using System.Data;
using ByteFX.Data.MySqlClient;
using MySQLDriverCS;
using Microsoft.Data.Odbc;
using System.Data.OleDb;
//using CoreLab.MySql;
namespace ProvidersTest
{
class DriversTest
{
const string ByteFxString = "***";
const string ODBCSTRING ="***";
[STAThread]
static void Main(string[] args)
{
DriversTest test = new DriversTest();
if(args.Length == 1){
try {
if((test.iterations = Convert.ToInt32(args[0])) <= 0) {
throw new Exception();
}
} catch {
test.Usage();
}
}
test.Run();
}
private delegate void TestMethods(int iterations);
private TestMethods AllTests;
private int iterations = 100;
private void Run() {
AllTests += new TestMethods(this.MySQLTest);
AllTests += new TestMethods(this.OdbcTest);
AllTests += new TestMethods(this.ByteFXTest);
Console.WriteLine("Results for {0} iterations:", iterations);
AllTests(iterations);
}
void Usage(){
Console.WriteLine("usage: ProvidersTest number\ndefault is:" + iterations);
}
static string query = "SELECT id, email, Passwort, Nachname, Vorname, Titel, Strasse, PLZ FROM personen";
static IDbConnection connection;
static IDbCommand cmd;
static IDataReader reader;
void MySQLTest(int iterations)
{
DateTime begin = DateTime.Now;
for(int i = 0; i < iterations;i ++)
{
try {
connection = new MySQLConnection(
new MySQLConnectionString(
"***","***","**","***").AsString);
connection.Open();
cmd = new MySQLCommand();
cmd.Connection = connection;
cmd.CommandText = query;
reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
while(reader.Read()) {
}
} catch(Exception e) {
Console.WriteLine(e.Message + "\n"+e.StackTrace);
} finally{
reader.Close();
connection.Close();
}
}
DateTime end = DateTime.Now;
TimeSpan result = end - begin;
Console.WriteLine("MySQLDriverCS:" +result.Minutes + ":" + result.Seconds + ":" + result.Milliseconds);
}
void OdbcTest(int iterations)
{
DateTime begin = DateTime.Now;
for(int i = 0; i < iterations;i ++)
{
try
{
connection = new OdbcConnection(ODBCSTRING);
connection.Open();
cmd = new OdbcCommand();
cmd.Connection = connection;
cmd.CommandText = query;
reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
while(reader.Read()){
}
} catch(Exception e) {
Console.WriteLine(e.Message + "\n"+e.StackTrace);
} finally {
reader.Close();
connection.Close();
}
}
DateTime end = DateTime.Now;
TimeSpan result = end - begin;
Console.WriteLine("ODBC :"+result.Minutes + ":" + result.Seconds + ":" + result.Milliseconds);
}
/*
void ByteFXTest(int iterations){
DateTime begin = DateTime.Now;
for(int i = 0; i < iterations;i ++) {
try {
connection = new MySqlConnection(ODBCSTRING);
connection.Open();
cmd = new MySqlCommand();
cmd.Connection = connection;
cmd.CommandText = query;
reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
while(reader.Read()){
}
} catch(Exception e) {
Console.WriteLine(e.Message + "\n"+e.StackTrace);
} finally {
reader.Close();
connection.Close();
}
}
DateTime end = DateTime.Now;
TimeSpan result = end - begin;
Console.WriteLine("ByteFX:" + result.Minutes + ":" + result.Seconds + ":" + result.Milliseconds);
}
*/
}
}
така ето и резултатите в къщи - локална mysql 4.0.15, атлон 2000, 256 ддр рам,
мисля че на сървъра няма да са различни като съотношение, затова не съм ги пускал
Results for 10 iterations:
MySQLDriverCS:0:1:328
ODBC :0:0:265
Results for 100 iterations:
MySQLDriverCS:0:11:593
ODBC :0:1:921
не поствам резултатите на другите 2ма "участници" защото бързам, но и 2та бяха по-бавни от одбц, най-добре е платеният CoreLab.MySql
Някои изводи:
1. разликата м/у нативна и одбц функция, принципно не е много голяма и в случая не играе решаваща роля.
основното, е че MySQLDriverCS е неузрял и не ползва оптимално апито. Дори и когато това стане
и изпревари одбц, разликата ще е пренебрежимо малка. Дали обаче изобщо някога ще стане по-добър от
одбц ще видим.
Основно развитие е момента търпи ByteFX.Data.MySqlClient, който от своя страна не ползва libmysql.dll и по
твоята схема картинката е
Прлижение->Native Driver->DB което означава, че има потенциал да се оптимизира, дано.
2. Дори и разликата м/у Native драйверите и одбц да беше същата в полза на Native, аз лично пак нямаше да ги ползвам,
защото в момента те са пълни c мини, дупки и неизвестности в имплементациите си и просто не може да се разчита на тях.
Какво значение има бързината, като заявката изобщо не може да се изпълни заради грешка в драйвера?
Когато почнат да се държат стабилно и изпълняват спецификациите и евентуално станат по-бързи
съм готов веднага да мигрирам.
ако някой получи други резултати, има допълнения към този тест или предложи друг
ще ми е интересно да прочета нещо по темата
Нови версии, нови резултати
Има нови версии на всички провайдъри освен одбц.net,
който променят ситузцията в известна степен
така че ето новите резултати от теста
Платеният MySQLDirect.NET вече изпреварва одбц, в новата си версия вече и той ползва
директно mysql ротокола, което му носи и предимството.
Който иска надежден и бърз nativ provider трябва да се бръкне 100$ за MySQLDirect.NET
Останалите да се ориентират към ByteFX, който пуска нови версии всеки месец и всяка следваща
е по-добра.
ODBC.NET
MySqlDirect.NET
MySQLDriverCS
ByteFX
който променят ситузцията в известна степен
така че ето новите резултати от теста
Results for 10 iterations:
ODBC 1.0.4030.0, 1/30/2002 :0:0:250
MySqlDirect.NET version 2.00 :0:0:250
MySQLDriverCS Release 3.0.13 February 25, 2004 :0:1:343
ByteFX Version 0.76 March 11, 2004 :0:0:390
Results for 100 iterations:
ODBC 1.0.4030.0, 1/30/2002 :0:2:31
MySqlDirect.NET version 2.00 :0:1:703
MySQLDriverCS:0 Release 3.0.13 February 25, 2004 :12:484
ByteFX Version 0.76 March 11, 2004 :0:3:562
Платеният MySQLDirect.NET вече изпреварва одбц, в новата си версия вече и той ползва
директно mysql ротокола, което му носи и предимството.
Който иска надежден и бърз nativ provider трябва да се бръкне 100$ за MySQLDirect.NET
Останалите да се ориентират към ByteFX, който пуска нови версии всеки месец и всяка следваща
е по-добра.
ODBC.NET
MySqlDirect.NET
MySQLDriverCS
ByteFX