Naudodami MySQL duomenų bazes C#, kūrėjai dažnai pasirenka oficialų "Oracle" MySql.Data (MySQL jungties / NET) paketą. Tačiau atsirado įtikinama alternatyva, kuri ne tik sutampa, bet net pranoksta oficialią jungtį beveik visais svarbiais rodikliais: MySqlConnector.
Šiame išsamiame palyginime išnagrinėsime, kodėl MySqlConnector yra tinkamiausias pasirinkimas šiuolaikinėms C# programoms ir kodėl turėtumėte apsvarstyti galimybę pereiti.
Dviejų jungčių istorija
MySql.Data: oficialus, bet varginantis pasirinkimas
MySql.Data, oficialiai žinomas kaip MySQL Connector/NET, yra oficiali "Oracle" MySQL ADO.NET tvarkyklė. Nors jis turi oficialų palaikymą, bėgant metams jis taip pat sukaupė daug problemų:
- GPL 2.0 licencijavimo sudėtingumas ir komerciniai licencijavimo reikalavimai
- Akivaizdžios našumo kliūtys esant apkrovai
- Dešimtys neišspręstų pažeidžiamumų egzistuoja daugelį metų
- Ketvirčio leidimai su lėtais kūrimo ciklais
- Ribotas serverio suderinamumas (tik MySQL serveriuose)
MySqlConnector: bendruomenės valdoma alternatyva
MySqlConnector yra visiškai naujas MySQL protokolo įgyvendinimas, sukurtas tik remiantis šiuolaikine .NET praktika. Jis nėra pagrįstas "Oracle" kodu, bet tiesiogiai įgyvendina "MySQL" eilutės protokolą, taigi:
- MIT licencijavimas, kuris yra tikrai palankus verslui
- Visų lyginamųjų indeksų rezultatai buvo geri
- Aktyviai kuriamas ir reguliariai išleidžiamas
- Platesnis suderinamumas su MySQL suderinamais serveriais
- Pradėkite nuo modernių .NET funkcijų diegimo
Našumas: "MySqlConnector" privalumai
Našumo skirtumas tarp dviejų bibliotekų yra didelis. Naujausi "MySqlConnector 2.3.1" ir "MySql.Data 8.2.0" etalonai rodo:
- Užklausų vykdymo laikas yra žymiai greitesnis
- Sumažintas atminties paskirstymas manipuliuojant duomenimis
- Didesnis pralaidumas esant lygiagrečiai apkrovai
- Efektyvesni ryšių telkiniai
Lyginamieji rezultatai nuosekliai rodo, kad "MySqlConnector" lenkia "MySql.Data" įvairiuose scenarijuose – nuo paprastų užklausų iki sudėtingų daug duomenų reikalaujančių operacijų. Tai nėra mažas patobulinimas, bet reikšmingas programos mastelio padidinimas.
Licencija: Laisvė prieš apribojimus
Viena iš įtikinamiausių priežasčių pasirinkti "MySqlConnector" yra licencijavimo modelis:
"MySql.Data" licencijavimo iššūkis
"MySql.Data" yra licencijuota pagal GPL 2.0 licenciją, tačiau pateikiama su "Oracle" bendrosiomis FOSS išimtimis. Tai sukelia tam tikrų problemų:
- Komercinėms programoms gali reikėti įsigyti komercines licencijas iš "Oracle"
- GPL autorių teisių reikalavimai gali turėti įtakos visai jūsų programai
- Teisinis netikrumas dėl platinimo ir išvestinių kūrinių
- Galimos komercinės programinės įrangos pardavėjų išlaidos
"MySqlConnector" MIT licencija
"MySqlConnector" naudoja MIT licenciją, kuri suteikia:
- Visiškai nemokamas komercinis naudojimas
- Programai netaikomi autorių teisių apribojimai
- Aiškios, paprastos licencijavimo sąlygos, kurias gali suprasti teisininkų komanda
- Nereikia jokių licencijavimo mokesčių, nepriklausomai nuo jūsų verslo modelio
Daugumai komercinės programinės įrangos kūrimo vien šio licencijos skirtumo pakanka, kad būtų galima pateisinti konvertavimą.
Asinchroninis: tikras asinchroninis programavimas
Vienas iš svarbiausių "MySqlConnector" techninių privalumų yra tikras asinchroninis įgyvendinimas:
MySql.Data
Prieš 8.0.33 leidimą, MySql.Data turėjo rimtą trūkumą: visi "asinchroniniai" metodai iš tikrųjų buvo sinchronizuotos operacijos, kurios grąžino užbaigtas užduotis. Tai reiškia:
- Nėra tikro I/O lygiagretumo
- Įkelti žemyn siūlų baseinas alkis
- Mastelio kliūtys didelio sutapimo scenarijuose
- Klaidinančios API sutartys gali atrodyti asinchroninės, bet ne
MySqlConnector yra tikrai asinchroninis
MySqlConnector įgyvendina tikrą asinchroninį I/O:
Dėl to šiuolaikinės asinchroninės / laukimo programos yra tikrai keičiamo dydžio.
Serverio suderinamumas: ne tik MySQL
MySqlConnector palaiko platesnę su MySQL suderinamą duomenų bazių ekosistemą:
MySql.Data limitas
- Tik MySQL serveris (suderinamumo problemos su MariaDB 10.10+)
- Ribotas debesies paslaugų teikėjų palaikymas
- "Aurora" optimizavimo nėra
MySqlConnector platus suderinamumas
- MySQL 5.5+ ir 8.x/9.x serijos
- MariaDB 10.x ir 11.x
- "Amazon Aurora" (specialiai optimizuota)
- "Azure" duomenų bazė, skirta "MySQL"
- "Google Cloud SQL", skirta "MySQL"
- Percona serveris
- Planetos mastelis
- Vienos saugyklos duomenų bazė
- TiDB
Šis lankstumas yra labai svarbus šiuolaikinėje debesų aplinkoje, kur gali tekti perjungti skirtingas su MySQL suderinamas paslaugas.
Klaidų pataisymai: dešimties metų problemos išspręstos
"MySqlConnector" ištaiso dešimtis ilgalaikių neišspręstų "MySql.Data" klaidų. Štai keletas žymių pavyzdžių:
Ryšio ir telkinio valdymas
- Ryšių telkiniai naudoja rietuves, o ne eiles (dėl to nutrūksta ryšys)
- Grįžus į baseiną ryšys netinkamai nustatomas iš naujo
- Atminties nutekėjimas esant dideliam ryšiui
Duomenų tipo apdorojimas
- TINYINT(1) nenuosekliai grąžina skirtingus tipus
- TIME ir DATETIME tikslumo problemos
- Kai kuriais atvejais NULL netinkamai apdoroja reikšmes
Operacijų valdymas
- Komandos, įvykdytos su netinkama operacija
- Operacijų izoliavimo lygis, turintis įtakos visam seansui
- Paskirstytų operacijų problemos
Parengtos ataskaitos
- Įvairios duomenų sugadinimo problemos parengtose ataskaitose
- Kai kurie parametrų susiejimo tipai yra neteisingi
- Parengus pareiškimą pablogėja eksploatacinės savybės
Šiuolaikinės .NET funkcijos: pirmauja
MySqlConnector visada pirmiausia įdiegia naujas .NET funkcijas:
- Pirmoji "MySQL" tvarkyklė, palaikanti .NET Core
- DbBatch palaikymas (.NET 6.0)
- DbDataSource palaikymas (.NET 7.0)
- Palaikomos tik data ir laikas
- Modernus asinchroninis režimas
Šis perspektyvus požiūris užtikrina, kad jūsų programos galėtų iš karto panaudoti naujausias .NET galimybes.
migruoti: lengviau, nei manote.
Perjungti iš "MySql.Data" į "MySqlConnector" paprasta:
1. Atnaujinkite paketo nuorodą
2. Atnaujinkite vardų sritį
3. Atnaujinkite ryšio eilutės parinktį
Dauguma ryšio eilučių išlieka tos pačios, tačiau kai kurios numatytosios nuostatos skiriasi:
- ConnectionReset=true pagal numatytuosius nustatymus (geriau telkimui)
- IgnoreCommandTransaction=false pagal numatytuosius nustatymus (griežtesnis tikrinimas)
- CharacterSet nepaisoma (visada naudojamas utf8mb4)
4. Spręskite reikšmingus pokyčius
Perėjimo gairėse nurodomi konkretūs pakeitimai, kuriuos reikia atlikti:
- Numanomo tipo konvertavimas
- Išimties tipas
- Parametrų apdorojimas
- Operacijos aprėpties veikimas
Poveikis realiame pasaulyje: našumo etalonai
Gamybos scenarijuje komanda praneša:
- 25–40 % greitesnis užklausų vykdymo laikas
- 30–50 % sumažintas atminties naudojimas
- Pašalina skirtojo laiko problemą, kamuojančią MySql.Data
- Geresnis ryšių telkinio panaudojimas
- Sumažina GC slėgį sumažindamas dozavimą
Objekto sistemos branduolio integracija
"MySqlConnector" sklandžiai integruojasi su "Entity Framework Core" per "Pomelo" teikėją:
Šis derinys užtikrina puikų našumą ir suderinamumą su naujausiomis EF Core funkcijomis.
Kada neperjungti
Nors "MySqlConnector" daugeliu atvejų veikia gerai, apsvarstykite galimybę toliau naudoti "MySql.Data", jei:
- Naudojate labai seną .NET Framework versiją (nors MySqlConnector palaiko .NET Framework 4.6.1+)
- Turite daug pasirinktinio kodo, kuris priklauso nuo konkretaus "MySql.Data" elgesio
- Programa sena ir stabili, be našumo problemų
- Jums reikia "Oracle" komercinio palaikymo sutarties
Bendruomenė ir vystymasis
MySqlConnector privalumai:
- Aktyvus GitHub kūrimas ir reguliarus leidimų leidimas
- Techninės priežiūros darbuotojai reaguoja ir gali greitai ištaisyti klaidas
- Išsami dokumentacija ir pavyzdžiai
- Atviras kūrimo procesas, kuriame gali prisidėti kiekvienas
- Reguliariai tobulinkite ir optimizuokite našumą
Ateitis aiškiai matoma
.NET MySQL ekosistemos tendencija yra aiški: MySqlConnector atspindi MySQL ryšio ateitį .NET programose. Dėl puikaus našumo, tikro asinchroninio diegimo, platesnio suderinamumo ir verslui palankaus licencijavimo jis yra išskirtinis pasirinkimas naujoms programoms.
"Oracle" "MySql.Data", nors ir oficiali, yra apkrauta senaisiais dizaino sprendimais, licencijavimo sudėtingumu ir lėtesniu inovacijų tempu. Šiuolaikinėms programoms, sukurtoms daugiausia dėmesio skiriant našumui, mastelio keitimui ir kūrėjų patirčiai, "MySqlConnector" yra aiškus nugalėtojas.
Pakeiskite
Naujiems projektams nuo pat pradžių pasirinkite MySqlConnector. Esamų programų perkėlimo pastangas įvertinkite pagal šiuos privalumus:
- Didelio srauto programos iš karto padidins našumą
- Debesies programoms bus naudingas geresnis suderinamumas
- Verslo programinė įranga įvertins supaprastintą licencijavimą
- Šiuolaikinės .NET programos gali pasinaudoti naujomis funkcijomis
"MySQL" ekosistema .NET yra subrendusi, o "MySqlConnector" yra kitas jos evoliucijos skyrius. Klausimas yra ne tai, ar pereiti, o kada pereiti prie šios geresnės bibliotekos.
Originalus:Hipersaito prisijungimas matomas. |