Python a Microsoft SQL náhrada ODBC

Python a Microsoft SQL náhrada ODBC
« kdy: 26. 05. 2022, 08:36:38 »
Zdravicko.

Taka otazka na diskusiu. Klasicka situacia Windos (x), Python a MS SQL. Standardne pouzivam PyODBC ako driver ale obcas sa mi stane ze potrebujem komunikovat s DB v radoch ms a zapisovat/updatovat x zaznamov do 300ms. Optimalizoval som co som vedel ale aj cisto len zapis/citanie x zaznamov mi zoberie 700ms. Riesil som to tak ze som hlupo rozdelil appku na 3 kde kazda cita a zapisuje a som v tom ramci 300ms. Moja otazka teda znie. Existuje alternativa pre pyODBC ktora by rychlejsie zapisovala do MS SQL alebo sa pozeram zlym smerom a hrdlo bude niekde inde pripadne ako by sa to dalo inak riesit?
« Poslední změna: 26. 05. 2022, 08:44:12 od Petr Krčmář »


Re:Python a Microsoft SQL náhrada ODBC
« Odpověď #1 kdy: 26. 05. 2022, 08:51:27 »
v prvom rade si zisti, co ti trva tych 700ms. Samotne pripojenie? insert/update? nie su tam trigre?
Ak nepotrebujes okamzite spatnu vazbu, ci insert/update presiel, tak vyuzi queue v mssql. Apka bude do nej sypat data svojou rychlostou a zaroven si z nej bude citat data nejaka procka, ktora bude pomaly robit insert/update.

oss

  • ***
  • 229
    • Zobrazit profil
    • E-mail
Re:Python a Microsoft SQL náhrada ODBC
« Odpověď #2 kdy: 26. 05. 2022, 09:03:08 »
Tam je nieco velmi velmi velmi zle.

MS SQL aj pre zlozity insert s indexami na tabulke zvlada < 2ms. Citanie tiez (ano pri 4-ritom joine s agregaciami to moze byt 20ms).

Ale hento vyzera skor na zmrseny driver, alebo snapschot tranzakcie zmiesane s pomalym jazykom a aplikacnou logikou.

V MS SQL si zapni Query Store, ten ti povie v com je problem.

Re:Python a Microsoft SQL náhrada ODBC
« Odpověď #3 kdy: 26. 05. 2022, 10:02:11 »
No onomi fakt v cistom trva cca 280ms spravit cca 150 Updat a cca 100 Select s tym ze je tam OPC server.
Ten OPC si pocucne na komunikaciu cca 120ms teda cisty cas na transakcie je 160ms na vsetko. Tiez sa mi to zda strasne pomale ale tu kombinaciu ODBC + python pouzivam v podstate dookola akurat pri tejto apke sa ide dost na rychlost.

K tomu ODBC driveru - ako zistit ci je "zmrseny driver" ?
K aplikacnej logike - jednoduchy loop kde nacitaj udaj s OPC -> UPDATE do SQL ked skoncis vsetky premenne tak naopak SELECT s SQL a zapis na OPC nic viac nic menej.

Re:Python a Microsoft SQL náhrada ODBC
« Odpověď #4 kdy: 26. 05. 2022, 10:11:04 »
Nejdrive si zjisti jestli za to doopravdy muze driver. Muze za tim byt ledacos jineho. Jako nepouzivani Bind Variables anebo treba spatne datove typy(to se tyka zejmena Sybase ovladacu). Zkus proste to same spustit jinak odjinud.
Muze se treba stat, ze INSERT spousti nejaky trigger ktery je pomaly, anebo databaze pri insertu kontroluje referencni integritu a tobe nekde chybi index.

MS SQL vzniknul jako klon databaze Sybase, kdyz MS koupil firmu, ktera mela prava ke zdrojovym kodum. Dneska je navic MS celkem vstricny k Linuxu a tak mas vice moznosti jak se do MS SQL z Linuxu pripojit.

- (ODBC) originalni open-source ovladac pro Sybase, ktery se prubezne uktualizuje i pro ruzne verze MS SQL
- (ODBC) MS vydal svuj vlastni closed-source ovladac pro Linux
- (JDBC) Python ma wrapper pres ktery natahle libjvm a nacte JDBC driver