login_zajety_sic
login_zajety_sic
#python #programowanie #sql #sqlserver

Piszę sobie skrypt który robi ok. 1000 insertów, w przypadku domowego laba takie zapytanie trwa chwilę ale skrypt docelowo będzie uruchomiony na produkcji gdzie nie ma tak szybkiego połączenia do bazy i chciałbym sobie zasymulować takie środowisko. W jaki sposób mógłbym zasymulować takie produkcyjne środowisko?

- skrypt w pythonie który używa pyodbc
- docker z SQL Server Express postawiony na Synology.
0
  • Najlepsze
  • Wszystkie komentarze
Tank1991
możesz za pomocą time.sleep() zasymulować czas oczekiwania na odpowiedź


@Przemosz: weź mu nie podpowiadaj lepiej, nikt w żadnej poważnej firmie tak nie robi, z asyncio tez mozesz go ciekawie wpakowac jesli tam sekwencja idki nadaje np
4
GaiusBaltar
@login_zajety_sic: Jeśli możesz, poślij to w jednym zapytaniu, tak aby nie było roundtripa pomiędzy każdym insertem a Twoim kodem. Wtedy prędkość połączenia będzie miała niewielkie zdarzenie, o ile nie insertujesz paruset mega w każdym zapytaniu.
2
Tank1991
@login_zajety_sic:

skrypt iteruje po kazdym pliku w folderze i wysyla pojedynczego inserta

lol to zapisz sobie co jest do wlozenia w inny plik nawet zamiast do bazy a potem naraz z tego pliku do bazy
2
Tank1991
W jaki sposób mógłbym zasymulować takie produkcyjne środowisko


@login_zajety_sic: powinienes miec cos takiego jak preprodukcja /stage - czyli odtworzone srodowisko prod bedace jak najblizej warunkow prod ale wiadomo - po kosztach i tam to odpalac

jak nie masz to stawiasz, jak nie mozesz postawic to znaczy ze jestes w januszeksie i nie ma co tego sprawdzac
0
login_zajety_sic
login_zajety_sic
@GaiusBaltar: No właśnie dumam nad tym żeby to posłać jako jedno duże zapytanie bo obecnie skrypt iteruje po kazdym pliku w folderze i wysyla pojedynczego inserta, dumam nad tym aby skrypt zebral wszystkie inserty do jednego query na koniec iterowania.
0
Przemosz
@login_zajety_sic: Jakbyś miał/uzyskał informacje ile zajmuje pojedynczy insert to możesz za pomocą time.sleep() zasymulować czas oczekiwania na odpowiedź od bazy danych. No oczywiście nie musze wspominać że tu aż się prosi o await asyncio.sleep(), dzięki czemu w czasie oczekiwania na odpowiedź od bazy danych mógł byś już robić kolejnego inserta
0
login_zajety_sic
login_zajety_sic
@Tank1991: Tak właśnie teraz zrobiłem, zbieram każdy insert do pliku (a raczej do zmiennej) i na koniec wywołuje zapytanie.

@Przemosz: @Tank1991: Nie no, w sleep nie bede się bawił, nie chce sztucznie spowalniac skryptu.
0
Saly
@login_zajety_sic: co do polepszenia wydajności to oczywiście jedno zapytanie robiące wszystko. Jak zapytań musi być wiele (np. bazy mają limity) to odpal te inserty w transakcji
0
Tank1991
@login_zajety_sic: no i gitówa, najlepsze rozwiazanie problemu to zawsze brak problemu
0
login_zajety_sic
login_zajety_sic
@Saly: Wiesz, ja tu się spuszczam nad tym SQL ale tak naprawdę może się okazać że wystarczy aby skrypt wypluł CSV, ale że nie sprecyzowano do czego ma wypluwać skrypt to robię opcje aby skrypt wypluwał do CSV jak i do bazy.
0