Search  
Friday, May 25, 2012 ..:: Forum ::.. Register  Login
 Forum Minimize
Pentru a putea posta mesaje trebuie să vă înregistraţi.
Notă: Mesajele cu conţinut jignitor sau ilegal (inclusiv cereri de soft piratat) nu sunt acceptate şi vor fi şterse imediat .

Pentru a primi raspunsuri rapide si corecte, scrieti in mesaj ce intentionati sa faceti, ce mesaj de eroare primiti, in ce context si in urma caror actiuni. De asemenea, mentionati versiunea de FoxPro in care lucrati!
Dacă nu specificați versiunea, se consideră VFP 9.0 SP2.

SearchForum Home
  Visual FoxPro  Baze de date, tabele, view-uri si indecsi  Actualizare .cd...
 Actualizare .cdx
 
 7/12/2006 12:55:55 PM
User is offlineanonymous
0 posts


Actualizare .cdx
 (N/A)
Am si eu o nedumerire.
Punindu-mi problema optimizarii la scrierea in tabele, am ajuns si la fisierele .cdx. Buun. Treaba e clara: cu cit am mai multi indecsi, vor merge mai usor interogarile, dar se va ingreuna adaugarea/editarea de inregistrari, din cauza ca sunt mai multi indecsi de actaulizat. Cel putin asa am inteles eu.

Ceea ce nu am inteles este ce se intimpla atunci cind fac un REPLACE. Adica:
- daca modific ceva pe unul din cimpurile din index, e clar ca se actualizeaza cdx-ul
- daca nu modific pe nici unul din cimpurile pe care am chei, se mai duce fox-ul si prin cdx?
- dar daca eu fac REPLACE si pe un cimp cheie, dar valoarea este aceeasi?

Ideea mea este de a construi in asa fel aceste replace-uri incat sa scrie cit mai putin pe disk.
 7/12/2006 1:00:25 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Actualizare .cdx
 (Romania)
La replace pe un camp cheie banuiesc ca se salveaza si in cdx. In rest, cre'ca numai VFPT iti poate raspunde.
Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 7/12/2006 1:33:41 PM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Actualizare .cdx
 (Romania)
Nu cred ca ar trebui sa-ti faci probleme de-astea. Singura data cand VFP poate determina scrierea buferelor e cu comanda FLUSH FORCE.
 7/12/2006 2:43:34 PM
User is offlinenae racaru
714 posts
www.rarom.ro
1st




Re: Actualizare .cdx
 (Romania)
Am senzatia ca o smecherie tot se foloseste la scrierea in .cdx, pentru ca am sesizat ca la tabelele mari, daca faci un REINDEX dimensiunea .cdx scade drastic, uneori ajungand pana la jumate (in functie de cat de rar este facut REINDEX-ul si de cat de mult s-a scris (adaugat-modificat) in campurile ce compun indexi)

VFP 6 si 9 + Oracle
 7/12/2006 3:09:24 PM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Actualizare .cdx
 (Romania)
Problema e structura unui index btree. In momentul in care e invalidat un nod prin actualizari, acolo raman "gauri", in timp . La reindexare se regenereaza lista de key si se construieste indexul optimizat deja.

 7/12/2006 4:14:12 PM
User is offlineanonymous
0 posts


Re: Actualizare .cdx
 (N/A)
Bine, reindexarea este clar ca rezolva niste probleme. Desi eu nu folosesc REINDEX ci DELETE TAG ALL si apoi refac indecsii.

Ideea mea era alta: atunci cind actualizez o tabela as vrea sa optimizez acest proces reducind cit mai mult scrierea pe disc. Cum in dbf trebuie sa scriu, singurul loc unde as putea cistiga ceva ar fi la scrierea in cdx. Astfel, daca as sti cum face fox-ul scrierea asta, poate as reusi sa mai salvez ceva.

Bufferingul este si el o solutie, darla lucrul in retea ... stiu ca pun timpii foarte mici.
 7/12/2006 9:29:40 PM
User is offlineEugen Gliga
1052 posts
1st




Re: Actualizare .cdxR
 (N/A)
Referitor la indecsi, urmatoarea situatie mi-a dat multe batai de cap: Uneori inainte de a deschide un fisier faceam testul "Fopen('fisier.cdx',2)>=0". In caz ca era adevarat faceam un "Use Fisier Shared" urmat de un "Index on field tag field". Aceasta instructiune in mod normal n-ar fi trebuit sa mearga. Din nefericire nu dadea nici o eroare, dar consecintele erau imprevizibile. Una din ele era faptul ca fisierul nu mai putea fi deschis de alt utilizator, deci devenea cumva deschis exclusiv. Mi-am pierdut mult timp pana am aflat de ce nu mai pot alti useri deschide un fisier din moment ce nimeni nu-l deschisese in mod exclusiv. Cu toate acestea, o comanda Reindex, spune ca fisierul nu este deschis in mod exclusiv. Dupa ce am descoperit aceasta problema am evitat-o prin redeschiderea fisierului. Din teste insa am descoperit o treaba si mai ciudata. Incercati sa deschideti un fisier neindexat in mod shared in doua instante diferite de VFP. Intr-una din ele dati comanda Index on Field tag field. Fisierul se va indexa insa daca mergeti in cealalta instanta, o comanda Set order to field nu va functiona decat dupa inchiderea fisierului din prima instanta si redeschiderea celui din a doua instanta. Cum vi se pare situatia ?

 7/12/2006 10:05:28 PM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Actualizare .cdx
 (N/A)
 camsambora wrote
Cum in dbf trebuie sa scriu, singurul loc unde as putea cistiga ceva ar fi la scrierea in cdx. Astfel, daca as sti cum face fox-ul scrierea asta, poate as reusi sa mai salvez ceva.


Inca o data, e cea mai mica problema pe care o ai :). Nici nu se merita sa pierzi timpul macar punandu-ti asemenea probleme.
Sper sa nu te irit repetandu-ti asta, dar adevarata problema referitor la indecsi este  selectivitatea , cat mai putine duplicate. Daca asta e rezolvata, restul e OK, incluzand mai putine "gauri" la update (gandeste-te cata noduri din btree vor fi invalidate cand inlocuiesti o cheie cu 10k duplicate, care ar trebui inlocuite toate sau adaugate in CDX si inlocuite referintele la noua locatie)


 7/12/2006 10:33:00 PM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Actualizare .cdx
 (Romania)

Ai dreptate, Dorin. Din pacate exista situatii cand trebuie sa traim cu selectivitate proasta, datorita datelor. Uite un exemplu: sa presupunem ca in nomenclatorul de produse cota de tva nu este stocata in clar, ci avem o tabela de cote de tva, iar fiecare produs contine id-ul cotei. Avem index pe coloana cu cota tva (e necesar pentru relationare). Cote de tva sunt doar doua. Produsele sunt 1 milion, deci avem o gramada de duplicate. Asta e, karma rea. :)


Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 7/13/2006 8:51:56 AM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Actualizare .cdx
 (Romania)
Bineinteles ca sunt si exceptii.
Eu as evita insa un index.

Din curiozitate, la ce ar fi necesar in cazul expus de tine?

 7/13/2006 9:02:27 AM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Actualizare .cdx
 (Romania)
N-am inteles intrebarea. La ce ar fi necesar CINE? indexul?
Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 7/13/2006 9:17:00 AM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Actualizare .cdx
 (Romania)
Da, am uitat sa specific :)
 7/13/2006 9:20:07 AM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Actualizare .cdx
 (Romania)

Pai... #1. pentru relatia din baza de date. Update, Cascade, Restrict si #2. Pentru join.....


Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 7/13/2006 9:32:49 AM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Actualizare .cdx
 (Romania)
Aha, am inteles acu (o fi si cafeaua pe care am baut-o)
Deci ai id_cotatva care se leaga de tabele de cote tva cu ce valoare o fi acolo.
Interesant.
Si daca se schimba? Adaugi un procent nou in lista de cote si inlocuiesti id-urile sau se va reflecta prin join noul procent?

Sorry pentru off topic, eu am coloana cu procent hardcoded si ma intereseaza ideea.


 7/13/2006 10:12:42 AM
User is offlineGrigore Dolghin
3590 posts
www.class-software.eu
1st






Re: Actualizare .cdx
 (Romania)

:)

Acu' vreo juma'de an a fost o discutie pe forum, generata de faptul ca trebuie adaugate coloane cand apar taxe noi. La momentul respectiv am sustinut ca se poate si fara sa adaugi coloane si imi propusesem sa scriu un articol de DB Design din care sa rezulte asta. N-am avut timp, din pacate, dar ideea in mare este urmatoarea:

Produsele (sa le folosim ca exemplu) pot avea o gramada de taxe asociate. Cea mai simpla metoda este sa adaugi o coloana pentru fiecare taxa in parte. Pe vremea lu' Remes era o acciza de 5% pentru produsele din tutun si alcoo, si 4% pentru cele alimentare. Am vazut aplicatii care pe langa coloana care contine procentul de TVA aveau si o coloana care continea procentul asta. Pe langa procent mai era si valoarea in clar (pentru ca daca factura este gresit calculata, esti obligat sa o stochezi asa gresit in baza de date, urmand sa te stornezi cu furnizorul ulterior). Deci... 2 taxe = 4 coloane. 3 = 6, s.a.m.d.

Well, abordarea asta are un mare dezavantaj: ori de cate ori vine un legiuitor tampit si mai introduce cate o taxa noi tre'sa modificam structura tabelelor. Sincer, mie unul mi s-a acrit, asa ca am cautat o alta solutie. Am gasit-o, zic eu. E adevarat ca implica 2 join-uri in plus, dar tabelele cu care se face join-ul au doar cateva inregistrari, deci....

Produse -> tabela de jonctiune cu tabela de taxe, care contine id-ul taxei si valoarea ei -> lista de taxe (2 tva-uri, 5 accize, whatever) -> nomenclatorul de taxe (TVA, ACCIZA, etc), pentru filtrare dupa tipul taxei, daca este cazul.

Am facut o diagrama simplificata a modelului, pe care o atasez la mesaj.


Grigore Dolghin
Visual FoxPro MVP 2006 - 2010
Class Software
My blog
 7/13/2006 10:42:55 AM
User is offlineanonymous
0 posts


Re: Actualizare .cdx
 (N/A)
 Dorin Vasilescu wrote
 camsambora wrote
Cum in dbf trebuie sa scriu, singurul loc unde as putea cistiga ceva ar fi la scrierea in cdx. Astfel, daca as sti cum face fox-ul scrierea asta, poate as reusi sa mai salvez ceva.


Inca o data, e cea mai mica problema pe care o ai :). Nici nu se merita sa pierzi timpul macar punandu-ti asemenea probleme.
Sper sa nu te irit repetandu-ti asta, dar adevarata problema referitor la indecsi este  selectivitatea , cat mai putine duplicate. Daca asta e rezolvata, restul e OK, incluzand mai putine "gauri" la update (gandeste-te cata noduri din btree vor fi invalidate cand inlocuiesti o cheie cu 10k duplicate, care ar trebui inlocuite toate sau adaugate in CDX si inlocuite referintele la noua locatie)




Deci, daca inteleg bine, atunci cind modific valorile pe un cimp inclus in cheie, in cdx ramin atit valorile vechi cit si cele noi. Aici ar fi, sa inteleg, problema spre care sa-mi indrept atentia.
 7/13/2006 10:51:37 AM
User is offlineDorin Vasilescu
1366 posts
1st




Re: Actualizare .cdx
 (Romania)
Multumesc de lamuriri.
ERP-urile au "dracii" deastea. Adevarul e ca, daca le configurezi, dupa aia se poate adapta usor la modificarile "modificatorilor" (ca parca asta e atributia lor) din guvern.

 Grigore Dolghin wrote
Am vazut aplicatii care pe langa coloana care contine procentul de TVA aveau si o coloana care continea procentul asta.


Am vazut si eu una din asta. Oare cine a facut-o?
Aha, mi-am amintit, chiar eu :)
  Visual FoxPro  Baze de date, tabele, view-uri si indecsi  Actualizare .cd...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement