.NET in velika količina podatkov v bazi
 
blackmamba 23. jan 2014 12:30:22 Pridružen od:
4. mar 2008
559 objav
392 25 11
#11

Pomojem je problem, ker potrbuješ pri branju iz tabele Product_Property za vsako izbrano lastnost dodaten join. Verjetno se zadeva upočasni šele, ko je izbranih več lastnosti ali že pri prvi?



Baje ima Firebird "PLAN analyzer", ki deluje podobno kot EXPLAIN v mysqlu.

Preveri kako je z indexi, konfiguracijo baze, koliko ram-a lahko uporablja za hranjenje indexov itd...


všeč(0) ni všeč(0) spam(0)
 
technolog 23. jan 2014 16:15:18 Pridružen od:
14. nov 2011
598 objav
768 300 22
#12

Niste ta prvi, k ste se zaklal na microsoftovih tehnologijah.


všeč(0) ni všeč(5) spam(0)
Z linuxom že 7 let. Pro web development.
 
Spartacus 23. jan 2014 16:25:56 Pridružen od:
23. dec 2007
642 objav
828 38 4
#13

Evo ti minus. Zakaj? Ker je brezvezen komentar, ki nima veze z originalnim vprašanjem. Zakaj pt.2? Ker sem že eksplicitno napisal, da se v te debate ne spuščam. Ker se mi ne da. Ker so zgolj 'versko prepričanje'.



Imaš predlog? Tudi na ne-microsoftovi tehnologiji? Bo več kot dobrodošel in se ti bom zanj lepo zahvalil.


všeč(4) ni všeč(1) spam(0)
 
ledi 23. jan 2014 19:07:41 Pridružen od:
14. avg 2008
681 objav
325 223 14
#14

Spartacus:

V SQL (Firebird SQL) bazi imam 3 tabele: Product (podatki o izdelkih), Property (možne lastnosti izdelkov) in Product_Property (lastnosti posameznih izdelkov, vmesna tabela)





Trenutno skupaj sestavljam filter (.NET web forms), ki bo na podlagi izbranih lastnosti vrnil spisek izdelkov, ki ustreza kriteriju. Do te točke je vse fine and dandy.



Problem pa se pojavi pri scenariju, ko gre za ogromno bazo: cca 200k izdelkov (Product), 40k lastnosti (Property) in približno 8 mio lastnosti izdelkov (Product_Property). Samo filtriranje traja precej predolgo, če program že vmes ne odleti zaradi premalo pomnilnika.



Ima kdo kakšen namig, izkušnjo, karkoli kako se te zadeve lotit? Kot že rečeno, gre za FirebirdSql bazo, na katero se .NET aplikacija poveže s pomočjo Firebird.NET providerja.



Hvala!



p.s.: Ker gre za integracijo na obstoječ sistem, bilokakšna prekopavanja baze ne pridejo v poštev. Lahko se doda kakšna zadeva, obstoječih tabel pa se ne sme dotikat.




je baza pravilno optimizirana?


všeč(0) ni všeč(0) spam(0)
 
kelvan 23. jan 2014 23:37:01 Pridružen od:
19. okt 2007
891 objav
658 122 26
#15

A moraš vedno prikazati vse izdelke, ki ustrezajo izbranim filtrom?


všeč(0) ni všeč(0) spam(0)
 
technolog 24. jan 2014 12:49:58 Pridružen od:
14. nov 2011
598 objav
768 300 22
#16

Spartacus:

Evo ti minus. Zakaj? Ker je brezvezen komentar, ki nima veze z originalnim vprašanjem. Zakaj pt.2? Ker sem že eksplicitno napisal, da se v te debate ne spuščam. Ker se mi ne da. Ker so zgolj 'versko prepričanje'.



Imaš predlog? Tudi na ne-microsoftovi tehnologiji? Bo več kot dobrodošel in se ti bom zanj lepo zahvalil.




Moj komentar izraža sočutje.


všeč(0) ni všeč(0) spam(0)
Z linuxom že 7 let. Pro web development.
 
cruiser 19. apr 2014 21:45:39 Pridružen od:
5. mar 2010
239 objav
275 16 3
#17

Najprej je potrebno videti kveri. Potem pa še povej kakšne indekse imaš na teh 3 tabelah. Zelo verjetno ti dela kje full table scan. Sama količina podatkov ni problematična za izvedbo kverija, če so indeksi ok.


všeč(0) ni všeč(0) spam(0)
// Senior software engineer, marketer and entrepreneur. Need help ? Let me know -> http://www.krevh.com/contact/
 
Spartacus 22. maj 2014 19:06:26 Pridružen od:
23. dec 2007
642 objav
828 38 4
#18

Tej začeti temi dolgujem še odgovor, hkrati pa sem ugotovil, da sem napisal premalo informacij, ki bi lahko pomagale pri iskanju odgovora, tako da se posipam s pepelom. Hkrati pa mi nekaj pravi, da tu ni ravno ogromno .NET programerjev (ta moment se spomnim samo na @mckmck, @ms3 in @urosbe) :)



Kljub temu pa - če se komu (tudi naključnemu obiskovalcu) privarčuje kakšna ura živcev, je pa že nekaj vredno :)



Skratka, problem ni bil direktno na bazi, ampak v implementaciji .NET rešitve. Bottleneck celotni zadevi so bili objekti tipa DataTable (s katerimi rešitev pač operira). V "starejšem" delu kode (ki je bila napisana pred nekaj leti) se je filtriranje delalo s pomočjo DataTable metode .Select(). Kar je delovalo, dokler ni prišlo do ogromne količine podatkov.



Potem pa smo filtriranje prepisali na LINQ in odzivni časi so se zmanjšali na 10% prvotne vrednosti. Tako ja, na 10% (torej, na eno desetino - iz ~90s na ~8-9s) prvotnega časa. Z vsakim tweakanjem pa se ta čas še manjša, tako da gremo očitno v pravo smer :)


všeč(4) ni všeč(0) spam(0)
 
kelvan 22. maj 2014 19:50:30 Pridružen od:
19. okt 2007
891 objav
658 122 26
#19

hvala za tole!



sicer že par let nisem delal ničesar v .NET, ampak info je vsekakor koristen


všeč(0) ni všeč(0) spam(0)
 
wingback 22. maj 2014 20:44:10 Pridružen od:
19. maj 2013
334 objav
224 14 3
#20

@+1 .NET programer btw. Nevem sicer kako je v večjih firmah in vzdrževanjem teh aplikacij. Verjetno so še kar dataTable-i in podobno.



Kar smo novega delali v firmi je šlo vse z LINQ in FluentNHibernate. Stvari špilajo super. Pa naj bojo stvari še tako komplicirane.


všeč(1) ni všeč(0) spam(0)
 
 

🔒 Za odgovor na to temo se moraš prijaviti.

Prijavi se