Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.

VB i baza sa cca 3000000 redova

[es] :: Visual Basic 6 :: VB i baza sa cca 3000000 redova

Strane: 1 2

[ Pregleda: 4845 | Odgovora: 22 ] > FB > Twit

Postavi temu Odgovori

Autor

Pretraga teme: Traži
Markiranje Štampanje RSS

steve585
Stevan Stanić
Project Manager
Zagreb

Član broj: 131815
Poruke: 281
*.xnet.hr.



+1 Profil

icon VB i baza sa cca 3000000 redova19.05.2007. u 11:48 - pre 205 meseci
Napraavio sam aplikaciju koja vrsi pretrazivanje baze podataka. Pretrazujem 9 tabela. Za povezivanje sam koristio ADO. Izmedju ostalog jedna od tabela ima oko 3 000 000 redova sa tendencijom rasta. Iz te tabele potrebna mi je suma kolone i id (select id, sum(vrijednost - korekcija) from tabela where datum between Od and Do group by id).
Vrijednosti Od i Do odredjuje korisnik unosom u tekstualna polja. Izvrsavanje ovog upita traje dobrih 20 minuta.

Postoji li nacin da se izvrsavanje upita ubrza?
steve585
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
*.DIALUP-SMIN.neobee.net.



+41 Profil

icon Re: VB i baza sa cca 3000000 redova19.05.2007. u 11:54 - pre 205 meseci
Nesto si ti tu zabrljao ;) Posalji deo koda kojim otvaras taj rekordset.
 
Odgovor na temu

steve585
Stevan Stanić
Project Manager
Zagreb

Član broj: 131815
Poruke: 281
*.xnet.hr.



+1 Profil

icon Re: VB i baza sa cca 3000000 redova19.05.2007. u 12:05 - pre 205 meseci
Ono sto nisam napisao, a trebao sam je to da rezultat ovog upita stavljam u Access bazu, koja sluzi kao svojevrsni backup. Access baza nakon izvrsavanja upita ima 2500 do 3000 redova u tabeli.
Code:

Dim adoConn As ADODB.Connection ' konekcija
Dim adoRS   As ADODB.Recordset  ' rekordset u kome ce biti podaci
Dim adoFld  As ADODB.Field      ' polje iz rekordseta, sluzi pri ispisu
Dim sQry    As String           ' SQL upit



VezaS 'Povezivanje na 3000000 redova bazu
VezaT008 'Povezivanje na Access backup bazu
Datumi

With RST
  Do While Not .EOF
    .Delete
    .MoveNext
  Loop
End With

Set adoConn = New ADODB.Connection
    adoConn.Open aa
    
    '-- formiraj upit
    Qry = "select itemnr as Artikl, sum(soldpieces-change) as Prodaja from stat where date between " & Od & " and " & Do & " group by itemnr"
    
    '-- kreiraj i otvori rekordset
    Set adoRS = New ADODB.Recordset
    adoRS.Open Qry, adoConn
    
    
   k = 0
   With adoRS
    '-- prikazi zapise
    Do While Not .EOF
      k = k + 1
        Artikl = !Artikl
        Prodaja = !Prodaja
        
             With RST
              .AddNew
                !Artikl = Artikl
                !Prodaja = Prodaja
                .Update
            End With
            
        '-- pomjeri se na sledeci zapis
        adoRS.MoveNext
    Loop
   End With
Set adoRS = Nothing
Set RST = Nothing
PorukaNula = MsgBox("Prijenos  zavrsen", vbOKOnly, "Poruka")

Pogledao sam ADO tutorijal i radio po uputama i tutorijala.


krcko: dodati CODE tagovi

[Ovu poruku je menjao Aleksandar Ružičić dana 20.05.2007. u 22:56 GMT+1]
steve585
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
*.DIALUP-SMIN.neobee.net.



+41 Profil

icon Re: VB i baza sa cca 3000000 redova19.05.2007. u 12:25 - pre 205 meseci
Da li si pokusao da stavis Break na pocetak i kraj svakog od blokova i da meris koji je od njih dugotrajan?

Npr. break pre procedure brisanja i posle, pre otvaranja agregatnog upita i posle (mislis da on dugo traje) a ovde mislim samo na trajanje Open metode, a ne na trajanje prolaska kroz rekordset, break na pocetak i kraj petlje gde ubacujes podatke. Sustina je da stvarno utvrdis koji od ovih blokova dugo traje, jer ja sumnjam da ti SELECT traje 20 minuta.

Ono sto bi sugurno ubrzalo stvar je da umesto DELETE metode u petlji samo izvrsis komandu "DELETE * FROM TabelaUKojuUbacujesAneZnamKakoSeZove" i to preko konekcije, tj Konekcija.Execute() metodu.
 
Odgovor na temu

steve585
Stevan Stanić
Project Manager
Zagreb

Član broj: 131815
Poruke: 281
*.xnet.hr.



+1 Profil

icon Re: VB i baza sa cca 3000000 redova19.05.2007. u 12:29 - pre 205 meseci
Nesto otprilike ovako ako sam dobro razumio: Break nisam dosada koristio u VB
Code:

Do While Not .EOF
k = k + 1
Artikl = !Artikl
Prodaja = !Prodaja

With RST
.AddNew
!Artikl = Artikl
!Prodaja = Prodaja
.Update
End With

'-- pomjeri se na sledeci zapis
adoRS.MoveNext

Break

Loop

Ovo sa DELETE cu svakako napraviti.


krcko: dodati CODE tagovi

[Ovu poruku je menjao Aleksandar Ružičić dana 20.05.2007. u 22:55 GMT+1]
steve585
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
*.DIALUP-SMIN.neobee.net.



+41 Profil

icon Re: VB i baza sa cca 3000000 redova19.05.2007. u 12:31 - pre 205 meseci
Ma ne, mislio sam da markiras liniju koda, tj. postavis BreakLine, dakle, kada si u editoru, kliknes pored pocetka linije na okvir sa leve strane i ceo red gde ti je linija treba da se oboji - to ti je postavljanje break linije. Dakle, stavis brejklinije i meris sta ti od blokova dugo traje.
Prikačeni fajlovi
 
Odgovor na temu

Shadowed
Vojvodina

Član broj: 649
Poruke: 12846



+4783 Profil

icon Re: VB i baza sa cca 3000000 redova19.05.2007. u 15:19 - pre 205 meseci
Tzv. brakepoint ;)
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
*.dialup.neobee.net.



+41 Profil

icon Re: VB i baza sa cca 3000000 redova19.05.2007. u 15:22 - pre 205 meseci
Citat:
Shadowed: Tzv. brakepoint

Naravno I nije tzv. vec se tako zove, a ja sam ga "krstio".
 
Odgovor na temu

steve585
Stevan Stanić
Project Manager
Zagreb

Član broj: 131815
Poruke: 281
*.xnet.hr.



+1 Profil

icon Re: VB i baza sa cca 3000000 redova19.05.2007. u 16:32 - pre 205 meseci
OK, moje neznanje je ogromno, fakat nikad nisam to koristio! Probati cu, pa se javim sa rezultatima, ali nista prije ponedjejlka.
steve585
 
Odgovor na temu

Ero S Ovoga Sveta

Član broj: 21509
Poruke: 173
*.teol.net.



Profil

icon Re: VB i baza sa cca 3000000 redova20.05.2007. u 17:58 - pre 205 meseci
I meni se cini da brisanje tu oduzima najvise vremena.
Posto vidim da brises sve recordse iz tabel, zar nebi bilo jednostavnije obrisati tu tabelu
pa posle napraviti istu takvu novu, praznu???
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
*.DIALUP-SMIN.neobee.net.



+41 Profil

icon Re: VB i baza sa cca 3000000 redova20.05.2007. u 18:41 - pre 205 meseci
Citat:
Ero S Ovoga Sveta:Posto vidim da brises sve recordse iz tabel, zar nebi bilo jednostavnije obrisati tu tabelu
pa posle napraviti istu takvu novu, praznu???

Ne, kao sto sam i naveo, najbrzi nacin je izvrsenje DELETE naredbe preko SQL-a, tj.:
Code:

Konekcija.Execute "DELETE * FROM TvojaTabela"
 
Odgovor na temu

steve585
Stevan Stanić
Project Manager
Zagreb

Član broj: 131815
Poruke: 281
62.159.241.*



+1 Profil

icon Re: VB i baza sa cca 3000000 redova21.05.2007. u 18:12 - pre 205 meseci
Napravio sam sljedece

adoConn.Open aa 'Ovdje sam postavio break (Pozicija 1)


Set adoRS = New ADODB.Recordset 'Ovdje sam postavio break (Pozicija 2)
adoRS.Open Qry, adoConn

k = 0 'Ovdje sam postavio break (Pozicija 3)

Od Pozicije 2 do Pozicije 3 nastaje zagušenje.





steve585
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
*.DIALUP-SMIN.neobee.net.



+41 Profil

icon Re: VB i baza sa cca 3000000 redova21.05.2007. u 18:37 - pre 205 meseci
Na kakvoj se konfiguraciji to izvrsava? Sam agregatni upit si dobro postavio, ne vidim sta se tu moze optimizovati, osim da stavis index na polje po kom grupises, ili da selektujes pojedinacne sume, a da razliku dobijes u kodu kao (S1-S2):
Code:

...
Qry = "SELECT itemnr AS Artikl, SUM(soldpieces) - SUM(change) AS Prodaja FROM stat WHERE date BETWEEN " & Od & " and " & Do & " GROUP BY itemnr"
...
 
Odgovor na temu

Ero S Ovoga Sveta

Član broj: 21509
Poruke: 173
*.teol.net.



Profil

icon Re: VB i baza sa cca 3000000 redova21.05.2007. u 19:56 - pre 205 meseci
Po meni upit jeste dosta komplikovan.
Probaj da prvo samo izdvojis podatke iz baze za potrebne datume, a kasnije da rukujes sa
recordsetom jer ce biti mnogo manje podataka.
 
Odgovor na temu

steve585
Stevan Stanić
Project Manager
Zagreb

Član broj: 131815
Poruke: 281
*.xnet.hr.



+1 Profil

icon Re: VB i baza sa cca 3000000 redova21.05.2007. u 20:00 - pre 205 meseci
Aplikacija je na Windows XP-u. Na bazu se spajam preko Gupte. Ne znam da li si vec radio sa njom. Fakat Ne kontam niti sam. Da stvar bude gora probao sam za tri mjeseca napraviti import samostalno i to je trajalo dobrih 30 minuta, pa sam napravio da se backup radi svaki dan, ali opet mu treba najmanje 20 minuta.
steve585
 
Odgovor na temu

goranvuc
Goran Vucicevic
Novi Sad

Član broj: 4934
Poruke: 1846
*.dialup.neobee.net.



+41 Profil

icon Re: VB i baza sa cca 3000000 redova21.05.2007. u 21:04 - pre 205 meseci
Prijatelju, ne znam ti ja sta je Gupta, mislio sam da koristis ADO. Da li si probao ovaj poslednji SQL koji sam ti poslao?
 
Odgovor na temu

Ero S Ovoga Sveta

Član broj: 21509
Poruke: 173
*.teol.net.



Profil

icon Re: VB i baza sa cca 3000000 redova21.05.2007. u 22:41 - pre 205 meseci
Mi se ovde ubismo da ti pomognemo a u stvari ne znamo ni o cemu se radi ni sta ti radis ni sta program
treba da radi ni kako radi ni sa cim radi ni ni ni ni......
Ajde nam ti daj ovo pa cemo sigurno naci neko rjesenje.

1. Pravi naziv te tvoje baze.(mada to nije toliko bitno)
2. Jel to access baza?(valjda jeste)
2. Ime te tvoje tabele sa "milijardu" polja.
3. Koliko ta tvoja tabela ima kolona i njihova imena po redu?
4. Sta trebas da izdvojis iz te tabele(koliko sam shvatio odredjene datume)?
5. Podatke iz koje kolone trebas da sabers?
6. Sta jos treba da se razvrstava ili sadira(ako treba)?

7. Sto nam vise informacija das lakse cemo da ti pomognemo.

Ovako lupamo gluposti i mi a i ti a ne znamo o cemu se radi.
NAJ BOLJE bi bilo kad bi ti okacio i tu bazu i taj tvoj program da mozemo da skinemo,
pa da vidimo o cemu se radi, naravno sem ako se u toj bazi ne nalazi, mozda, spisak
BIN LADENOVIH pristalica ili sta ti ja vec znam.
 
Odgovor na temu

steve585
Stevan Stanić
Project Manager
Zagreb

Član broj: 131815
Poruke: 281
*.xnet.hr.



+1 Profil

icon Re: VB i baza sa cca 3000000 redova22.05.2007. u 20:14 - pre 205 meseci
Imam ove podatke:

2) Baza na kojoj se izvodi sporni upit nije Access baza. U pitanju je SQL Gupta Base.
3) Ime tabele je kodu stat
4) kolone nisam brojao, ali ih je oko 10 i bitne su mi ove kolone iz upita itemnr, soldpieces, change, date
5) Ne trebam odredjene datume vec razliku ukupne prodaje umanjene za eventualna storna za pojedine artikle
("SELECT itemnr AS Artikl, SUM(soldpieces) - SUM(change)")
6) Kada se izvrsi ovaj upit sa OpenRecordset uzimam artikle (itemnr as Artikl) i kolicinu prodaje (SUM(soldpieces) - SUM(change)), te ih prebacujem u Access bazu, koju poslije koristim za izradu izvjestaja

Za povezivanje na Gupta bazu koristim ADO.

Danas sam nasao mozda razlog zbog kojeg imam probleme. Naime, prije par dana napravit je restore sporne baze, kopirana je orginalna baza i stavita je u razvojno okruzenje gdje razvijam aplikaciju, te otada se javljaju problemi.

U excel-u sam napravio kod gdje iz orginalne baze uzimam trazene podatke i to prolazi bez vecih problema.

Ako treba jos koja informacija, tu sam.
steve585
 
Odgovor na temu

steve585
Stevan Stanić
Project Manager
Zagreb

Član broj: 131815
Poruke: 281
*.xnet.hr.



+1 Profil

icon Re: VB i baza sa cca 3000000 redova22.05.2007. u 21:41 - pre 205 meseci
Ispravak podresnog navoda

Ime tabele je stat i nalazi se u kodu koji sam ranije postovao.

Gorane probao sam ovu kombinaciju sa dva sum jos prije no sto sam post-ovao problem na forum.
steve585
 
Odgovor na temu

Ero S Ovoga Sveta

Član broj: 21509
Poruke: 173
*.teol.net.



Profil

icon Re: VB i baza sa cca 3000000 redova22.05.2007. u 22:00 - pre 205 meseci
Ako sam ja dobro shvatio......
Probaj da uradis ovako:
Kada otvoris konekciju onda postavi upit ovako:
Code:

    Qry= "SELECT * FROM stat WHERE datum BETWEEN " & Od & " and " & Do
    Set adoRS = New ADODB.Recordset
    adoRS.Open Qry, adoConn

Znaci sad si izdvojio podatke koji ti trebaju, i u adoRS se nalazi bitno manje podataka nego u
cijeloj tabeli. Sada izvodi operacije na njemu i sabiraj kolone koje ti trebaju i prebacuj ih u Access bazu.
Recimo ovako:
Code:

Dim cSolid As Currency
Dim cCh As Currency
Dim cRezultat As Currency

   Do While Not adoRS.EOF = True
        cSolid = cSolid + adoRS.Fields("soldpieces")
        cCh = cCh + adoRS.Fields("change")
        adoRS.MoveNext
   Loop
   
   cRezultat = cSolid - cCh

Isto tako prebaci potrebne podatke u access bazu.
Po meni ovako bi trebalo mnogo brze da uradi. Probaj pa javi daa vidimo sta dalje ako nije uredu.
Jos nesto, ako ti ne prdstavlja problem umjesto Currency tipa koristi Single jer je
procesoru laksi za obradu pa ce se samim tim kod brze izvrsavati.
 
Odgovor na temu

[es] :: Visual Basic 6 :: VB i baza sa cca 3000000 redova

Strane: 1 2

[ Pregleda: 4845 | Odgovora: 22 ] > FB > Twit

Postavi temu Odgovori

Navigacija
Lista poslednjih: 16, 32, 64, 128 poruka.