pitanje brzine rada prilikom otvaranja MySQL baza u knjigovdstvenim programima

Radomi Mihajlovic

Zainteresovan član
Poruka
106
Kada je u pitanju programiranje, tj. izrada knjigovodstvenih programa u vision c++ sa MySQL bazama, zanima me da li je bolje odmah na pocetku svih aplikacija otvoriti sve baze ili otvoriti baze koje koristi samo jedna procedura i na kraju te procedure da se iste baze zatvore? Pitanje brzine rada kao i brzine otvaranja baza jer se radi u mrezi bili u win mrwzi lil nowel mrwzi?
 
Koristi transakcije za brze punjenje baze, koristi index za brze selektovanje baze, koristi truncate umesto delete from u slucaju kada praznis celu tabelu...

logika treba da ide ovako:

otvori konekciju
pocni transakciju
commit or rollback
zavrsi transakciju
zatvori konekciju

zasto transakciju?
recimo da imas konstantno punjenje u petlji, npr

while(uslov){
insert_users();
}

u ovom slucaju ce transakcija biti otvarana i zatvarana svaki put dok se petlja vrti.

umesto toga ako pocnes transakciju ovako:
Kod:
open connection 
begin transaction;
while(uslov){
try{
insert_users()
commit() 
}
catch(){
rollback()
}
}
end transaction;
end connection
to ce biti daleko brze.
 
Poslednja izmena:
Koristi transakcije za brze punjenje baze, koristi index za brze selektovanje baze, koristi truncate umesto delete from u slucaju kada praznis celu tabelu...

logika treba da ide ovako:

otvori konekciju
pocni transakciju
commit or rollback
zavrsi transakciju
zatvori konekciju

zasto transakciju?
recimo da imas konstantno punjenje u petlji, npr

while(uslov){
insert_users();
}

u ovom slucaju ce transakcija biti otvarana i zatvarana svaki put dok se petlja vrti.

umesto toga ako pocnes transakciju ovako:
Kod:
open connection 
begin transaction;
while(uslov){
try{
insert_users()
commit() 
}
catch(){
rollback()
}
}
end transaction;
end connection
to ce biti daleko brze.

Hvala na savetu, nikada ne brisem red u tabeli vec ceo red punim pranim vrednostima kao space ili nula zbog brzine to sam radio u cliperu.
Ne razumem cemu posle commit() ide cath() i rollback()?
Ali nisi mi odgovorio da li da na samom pocetku otvorim sve tabele ili da ih otvaram posebno u svakom podprogramu ovde je to procedura koliko sam razumeo?
Drugo da li i kako mogu iz jedne procedure da pozovem drugu proceduru kada ona obavi posao da se vratim u gornju proceduru?
Jos uvek citam o mysql-u i c++ pa su moja pitanja takva. Jos nisam naisao na to kako da dizajniram ekrane , maske za unos podataka. Hvala

- - - - - - - - - -

Ako imaš dovoljno RAM memorije bolje je sve ih otvoriti.

Novell je neuporedivo bolji, jer svaka radna stanica koristi svoju memoriju
a u Win mreži sve stanice koriste memoriju servera za razmenu podataka.

Znamn da je novell bolji ali nisam naisao da je besplatan i da mogu da ga bez naknade instaliram kod korisnika.

- - - - - - - - - -

Ako imaš dovoljno RAM memorije bolje je sve ih otvoriti.

Novell je neuporedivo bolji, jer svaka radna stanica koristi svoju memoriju
a u Win mreži sve stanice koriste memoriju servera za razmenu podataka.

Znamn da je novell bolji ali nisam naisao da je besplatan i da mogu da ga bez naknade instaliram kod korisnika.
 
Hvala na savetu, nikada ne brisem red u tabeli vec ceo red punim pranim vrednostima kao space ili nula zbog brzine to sam radio u cliperu.
Ne razumem cemu posle commit() ide cath() i rollback()?
Ali nisi mi odgovorio da li da na samom pocetku otvorim sve tabele ili da ih otvaram posebno u svakom podprogramu ovde je to procedura koliko sam razumeo?
Drugo da li i kako mogu iz jedne procedure da pozovem drugu proceduru kada ona obavi posao da se vratim u gornju proceduru?
Jos uvek citam o mysql-u i c++ pa su moja pitanja takva. Jos nisam naisao na to kako da dizajniram ekrane , maske za unos podataka. Hvala

- - - - - - - - - -



Znamn da je novell bolji ali nisam naisao da je besplatan i da mogu da ga bez naknade instaliram kod korisnika.

- - - - - - - - - -



Znamn da je novell bolji ali nisam naisao da je besplatan i da mogu da ga bez naknade instaliram kod korisnika.

Kako misliš tabele? Ako misliš na konekciju sa bazom, bolje je otvoriti na početku i zatvoriti na kraju što se tiče brzine.
To su transakcije i ubrzavaju ti unos i update baze, kada ne počneš transakciju na ovaj način, sam će je mysql početi, ali to nije dobro jer šta ako ti je insert into u petlji npr:

while(uslov){
insert into tabela vrednosti
}

u ovom slucaju transakcija ce biti otvorana commitovana/rollbackovana i zatvarana pri svakom unosu.

Umesto toga je bolje transakciju poceti pre, a na kraju ici commit

begin transaction
try
while(uslov){
insert into tabela vrednosti //da nisi poceo transakciju ovde bi automatski bio commit, sto znaci snimanje pri svakom unosu
}
commit //snima se sve tek na kraju, on pre toga skuplja podatke i tek kada kazes commit on ih snimi u bazu
}
catch(){
rollback //u slucaju greske odbacuje sve podatke, tako da nema polovicnih podataka u bazi
}
end transaction


Ovo pojasni:
Drugo da li i kako mogu iz jedne procedure da pozovem drugu proceduru kada ona obavi posao da se vratim u gornju proceduru?

- - - - - - - - - -

Obavezno izguglaj transakcije.

Sa njima radis klasicno kao i sve ostalo u query,

BEGIN TRANSACTION
COMMIT
ROLLBACK
END TRANSACTION
 
Hvala razumeo sam u vezi otvaranja baze i commit zatvaranja baze. Znam da se otvare vise baza na pocetku jedne procedure/programa recomo unosimo podatke o svim radnicima jedne firme. Otvaram sve baze pre nego sto pocne se sa unos podataka pre prikaza maske/ekrana za unos licnih podataka i kada se unesu podaci za jednog radnika upotrebim commit da se ti podaci upisu u bazu na kraju pre nego izadjem iz programa za unos podataka upotebi cu rollback i end transaction. Da li sam u pravu? Sto se tice pozivanja podprograma iz jednog programa, recimo u toku unosa podataka o radniku tereba da se unese mesto rodjenja radnika ali taj podatak nismo uneli ranije, da ne bi izlazili iz ekrana za unos licnih podataka ja pozovem podprogram za unos podataka o nazivima mesta i sifara tihh mesta, pa se vratim u gornji program gde smo zapeli sa unosom mesta i sada se unese i mesto rodenja. To me zanima nisam u c++ pronasao kako se ovako nesto radi, jer su kod c++ sve procedure kako sam mozda pogresno razumeo ne vidim nigde program i podprogram kako se on poziva. Podprogram je isto program ali ne nalazi se u programu koji ga poziva vec je to samostalni program i moze da ga pozove bilo koji drugi program kao sto i on moze da pozove neki podprogram. Znam sta je objektno orjentisano programiranje, to se u clipper resavalo kao sto sam gore opisao ali neznam kako to u c++ funcionise. Da li sam u pravu da se sa microsoft visio 2015 mogu da generisu ekraniu maske za unos podataka i prokaz podataka, ili se koristi nesto drugo? Hvala mnogo pitanja.
 
Hvala razumeo sam u vezi otvaranja baze i commit zatvaranja baze. Znam da se otvare vise baza na pocetku jedne procedure/programa recomo unosimo podatke o svim radnicima jedne firme. Otvaram sve baze pre nego sto pocne se sa unos podataka pre prikaza maske/ekrana za unos licnih podataka i kada se unesu podaci za jednog radnika upotrebim commit da se ti podaci upisu u bazu na kraju pre nego izadjem iz programa za unos podataka upotebi cu rollback i end transaction. Da li sam u pravu?

Ne, rollback je da odbaciš podatke u slučaju greške, njega stavi u catch blok, a u try stavi commit na kraju, to je da snimiš ako je sve u redu.

Sto se tice pozivanja podprograma iz jednog programa, recimo u toku unosa podataka o radniku tereba da se unese mesto rodjenja radnika ali taj podatak nismo uneli ranije, da ne bi izlazili iz ekrana za unos licnih podataka ja pozovem podprogram za unos podataka o nazivima mesta i sifara tihh mesta, pa se vratim u gornji program gde smo zapeli sa unosom mesta i sada se unese i mesto rodenja. To me zanima nisam u c++ pronasao kako se ovako nesto radi, jer su kod c++ sve procedure kako sam mozda pogresno razumeo ne vidim nigde program i podprogram kako se on poziva. Podprogram je isto program ali ne nalazi se u programu koji ga poziva vec je to samostalni program i moze da ga pozove bilo koji drugi program kao sto i on moze da pozove neki podprogram. Znam sta je objektno orjentisano programiranje, to se u clipper resavalo kao sto sam gore opisao ali neznam kako to u c++ funcionise. Da li sam u pravu da se sa microsoft visio 2015 mogu da generisu ekraniu maske za unos podataka i prokaz podataka, ili se koristi nesto drugo? Hvala mnogo pitanja

Zašto nebi koristio UPDATE?
Uneo si podatke za koje si imao info preko insert into,
Npr to mesto rođenja nisi uneo gore jer nisi imao tu informaciju, ali je sada imaš, odradiš

UPDATE tabela
SET MestoRodjenja = :mesto_rodjenja
WHERE ID= :id

//:mesto_rodjenja i :id su varijable iz C++,

sada ne mogu da se setim kako to ide u C++, ali u QUERY se nikada ne prosledjuju varijable direktno, nego nakon ciscenja spec znakova ili ja u php koristim PDO (prepared data object) gde preko f-je bindParam(':mesto_rodjenja',$mesto_rodjenja) prosledim sadrzaj varijable, u drugom slucaju makar propustim kroz mysql_real_escape_string da makne '/" zbog SQL Injection napada..
 
Da razumeo ali sam trebao reci na pocetku da su u pitanju ukljestene procedure to sam zaboravio, kada se iz jedne procedure poziva druga procedura i po izvrsenju druge procedure vraca se u prvcu proceduru, ali to uraditi iz c++ a ne u SQL-u, mada je u SQL-u to brze, ali neznam kako da u tom slucaju kreiram formu (masku za unos podataka).

Pa unutar te druge procedure idi call prva_procedura(inputi)...

Napravi procedure koje ti prihvataju input parametre u ovoj formi

DELIMITER //
CREATE PROCEDURE druga_procedura(kolona1 int, kolona2 varchar(100))
BEGIN
KOMANDE
call prva_procedura();
END //

Uglavnom ne razumem te dobro, preporucujem ti da se manis Srpskih foruma i svega Srpskog, balkanskog. Pitaj na stackoverflow-u, dobijes odgovor u minuti ukoliko nije nesto zamrseno.
 
Poslednja izmena:

Back
Top