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  containing in b...
 containing in blob field
 
 11/7/2010 8:53:40 PM
User is offlineAdrian Gerlan
581 posts
1st




containing in blob field
 (N/A)
Datele problemei: ERP dezvoltat intern in VFP cu datele stocate in Firebird. Sefu' meu sa hotarat ca vrea sa stie tot ce misca prin serverul de mail, si bineinteles sa faca selecturi dupa sender, receiver, precum si cuvinte incluse in subiect, respectiv body-ul mesajelor. Serverul de mail fiind unul care nu permite operatiile de selectare dorite folosind mai stiu io ce connector specializat in asa ceva (nici nu stiu daca exista un astfel de server/serviciu), am fost nevoit sa inventez un script intre serverul de mail si baza de date care sa capteze tot ce misca pe mail si sa insereze in BD. Scriptul merge ok, iar baza de date a atins dimensiuni destul de mari (300 Gb cu aproximativ 800k pozitii pe tabela principala). Problema mea este ca nu prea stiu care-i cea mai buna solutie pentru cautarea pe campurile subiect (varchar 1000) si body (blob - text type) a unui cuvant introdus de operator. Momentan cautarea pe campul subiect dureaza 750 de secunde. La fel de rau merge si selectul cu paginatie... "select id from mail where 1=1 rows 100 to 110 " merge instant insa pentru "select id from mail where 1=1 rows 500100 to 500110" trebuie sa astept 555 secunde. Am fost nevoit sa adaug un camp numeric indexat ascendent si descendent pe care-l populez cu numarul inregistrarii astfel incat "select * from mail where 1=1 and nrinreg between 500100 and 500110" se produce instantaneu. In fine, inrebarea mea este daca stie cineva o modalitate de alcatuire a bazei de date astfel incat sa obtin selecturi filtrate dupa cuvinte continute in campul subiect si body intr-un timp acceptabil.
AdiG
 11/8/2010 10:14:32 AM
User is offlineDaniel Buduru
2335 posts
1st




Re: containing in blob field
 (N/A) Modified By Daniel Buduru  on 11/8/2010 11:18:56 AM)
Pentru astfel de cazuri fie se implementeaza o tehnologie full-text search / full-text indexing, fie se utilizeaza o baza de date care o are deja implementata.
Pentru Firebid ar fi Lucene - http://lucene.apache.org/ , http://www.informit.com/articles/article.aspx?p=461633, dar mai exista si alte produse.
Postgresql, IBM db2, precum si alte baze de date sql, au implementate sau tehnologii full-text search (la Postgresql cu modulul TSearch2).

O baza de date de 300GB, care inca va mai creste, mi se pare cam mare pentru Firebird.
Dimensiunea bazei de date s-ar mai putea reduce stocand doar o versiune text a continutului mesajului - eliminand formatarea html, obiectele imbricate  si  atasamentele. Eventual, mesajul complet s-ar putea tine in alta baza de date, daca nu mai poate fi regasit dupa o cheie pe serverul de mail.

Daniel Buduru
  Visual FoxPro  Baze de date, tabele, view-uri si indecsi  containing in b...

Search  Forum Home         

 Google Ads Minimize

    

Copyright 2002-2010 Profox   Terms Of Use  Privacy Statement