Newsgroup: it.comp.lang.perl
Titolo: Database

Finora ho scritto solo database di tipo sequenziale su file di testo
che venivano letti ed elaborati. Ora però ho la necessità di passare a
una piattaforma più efficiente tipo SQL o qualcosa del genere. Cosa mi
consigliate tenendo presente che:
- Deve funzionare sia su sistemi unix che windows
- Deve essere gestibile dal perl
- Devo avere la possibilità di avere informazioni su come gestire dal
perl quel tpo di database.
- So poco o nulla di database relazionali.
- Il database è di dimensioni non troppo elevate
- Deve essere efficiente e favorire la velocità nella ricerca più che
la facilità di programmazione
Grazie
Andrea Busia



Secondo me dipende tutto da cosa devi effettivamente fare con il database.
Personalmente, ho fatto qualcosa con mysql e perl. Esiste anche per Win (ma
devi pagare per averlo) ed e' abbastanza funzionale. Le query, ovviamente,
sono in un subset di SQL.
La soluzione database relazionale e' pero' di tipo centralizzato, in cui i
dati stanno su un server.
A seconda di quello che ci devi fare, puoi pensare di usare file DBM tipo
DB_File. Questi ultimi ti permettono di avere database 'flat' (ovvero
singolo file e singola chiave): in pratica degli hash su file. Se hai una
chiave singola, i restanti campi sono facilmente strutturabili e non hai
bisogno di farci ricerche sopra, puoi provare ad usarli.
In caso estremo, puoi sempre crearti dei file di indice per velocizzare
l'accesso...
Maurizio
-- 
Maurizio M. Munafo' / 
mmmu...@usa.net
"Consider Phlebas, who was once handsome and tall as you" (T.S.Eliot)

 la facilità di programmazione
Credo che sia abbastanzo efficace per quello che vuoi fare (comparandolo
con i database 'flat file' che stai usando addesso). Per esserci sicuro
dovresti naturalmente rivellare le dimensioni delle ricerche che vuoi fare.
Cheers,
-w

Al momento ho alcuni file txt con record di questo tipo:
Chiave|Data|Caratteristiche|Altri _dati
Chiave|Data|Caratteristiche|Altri _dati
Ecc.
Una chiave per riga con tutti i dati che la riguardano, separati da un
"pipe" (|).
Ho bisogno di poter fare ricerche su questi dati, fare liste in base a
determinati parametri, non dover uploadare sul server svariati mega
ogni volta che aggiungo una chiave o modifico un dato.
Per la grandezza del database:
Al momento ho circa 1100 chiavi con una ventina di dati associati ad
ogni chiave.
Quindi, circa 1100 x 20=22000 dati.
Non dovrebbe crescere molto velocemente.
Spero di avervi fornito le indicazioni che avete chiesto.
P.S. Io ho parlato di SQL perchč ne ho sentito parlare bene, ma se
avete in mente altre piattaforme che potrebbero essere piů adatte alle
mie esigenze fatemelo sapere. Tanto devo imparare da zero ad usare SQL
come devo imparare da zero con qualsiasi altra piattaforma.
Grazie
Andrea Busia

delle ricerche che vuoi fare.
Non so se posso "rivellare"! :-)))))
Rivelare si, anzi ho già dato le dimensioni del mio database, e le sue
attuali caratteritiche, nella risposta a Maurizio (non si offenderà,
spero, se lo chiamo per nome).
Ciao
Andrea

Vedi il loro sito. Oppure 'perldoc DBI'.
E' andato solo con 'perldoc site::DBI', ma dovrebbe essere la stessa
cosa.
Un altro paio di domande (se non sto scocciando troppo! ^_^):
-  Nella mia directory lib del perl ho trovato il file "dbi_sql.h",
cos'è? Il driver DBD o cosa?
- Posso creare da zero un database con il solo SQL o mi servono altri
pacchetti?
- Ho il perl 5.005_02 per win95 e mySQL server (sempre per winzozz),
mi serve altro per poter creare, gestire e usare un database?
P.S. Sono davvero un rompiscatole, abbiate pietà! ^_^
Ciao
Andrea

 wrote:
: Un altro paio di domande (se non sto scocciando troppo! ^_^):
: -  Nella mia directory lib del perl ho trovato il file "dbi_sql.h",
: cos'è? Il driver DBD o cosa?
E` un include file del C. No, non e` il DBD, quello e` un pacchetto
separato, da prendere sempre sul CPAN nella directory
...../modules/by-module/DBD
: - Posso creare da zero un database con il solo SQL o mi servono altri
: pacchetti?
Puoi farlo con il solo SQL. Nel pacchetto di Mysql dovresti avere un
programmino (accidenti, si chiama mysql anche lui :-) che interpreta le
frasi SQL.
: - Ho il perl 5.005_02 per win95 e mySQL server (sempre per winzozz),
: mi serve altro per poter creare, gestire e usare un database?
Per Unix ci sono anche xmysql e xmysqladmin, due comodi programmini
sotto X (grafica). Puoi vedere se esiste qualcosa del genere per
Uindous (prova sul loro sito).
-- 
Nando Santagata: Telemastica & infornatica
Key fingerprint = C2 D9 C0 8E D5 B7 04 97  AF E8 3F 3E AF 4E 7F 9E
finger nando (at) ns (dot) ipers (dot) net   for my PGP public key
Home: 
http://www.ipers.net/~nandos

Uindous (prova sul loro sito).
A cosa servono?
Ciao
Andrea

 wrote:
: Uffa! Ogni volta che devo installare qualche modulo su windows 95/98
: devo fare un caos, di solito, per l'installazione, è necessaro usare
: "make" e su linux non ho problemi, ma per windows?
Non ho esperienza di Win, ma non funziona:
perl -MCPAN -e shell
:>Puoi farlo con il solo SQL. Nel pacchetto di Mysql dovresti avere un
:>programmino (accidenti, si chiama mysql anche lui :-) che interpreta le
:>frasi SQL.
: Cioè posso scrivere la query in semplice SQL e poi richiamarla dal
: perl attraverso questo interprete?
No, mysql (programma) e` un interprete SQL a se` stante. Puo` essere
comodo per provare le query e per fare lavoretti di DBA.
Per programmare usa DBI/DBD e leggi i manuali.
Tanto per farti un esempio (eliminando tutti i controlli sui codici di
errore ritornati, tanto per alleggerire la lettura):
$dbh = DBI->connect("DBI:mysql:mio:localhost","utente","password");
$sth = $dbh->prepare("select gruppo,utente,tipo from associazioni");
$sth->execute;
for($i = 0; $i < $sth->rows; $i++){
	$associazioni[$i] = [ $sth->fetchrow_array ];
}
:>Per Unix ci sono anche xmysql e xmysqladmin, due comodi programmini
:>sotto X (grafica). Puoi vedere se esiste qualcosa del genere per
:>Uindous (prova sul loro sito).
: A cosa servono?
Interfacce grafiche alle query e all'amministrazione del server.


perl -MCPAN -e shell
Funzionare, funziona. Però mi chiede un decompressore gzip e tar e per
windows non ne ho trovato che funzionino da riga di comando (uso
winzip, normalmente), inoltre pretende di scaricarli dal sito anche
quando li ho su HD.
Ciao
Andrea

 wrote:
:>: Uffa! Ogni volta che devo installare qualche modulo su windows 95/98
:>: devo fare un caos, di solito, per l'installazione, è necessaro usare
:>: "make" e su linux non ho problemi, ma per windows?
:>Non ho esperienza di Win, ma non funziona:
:>perl -MCPAN -e shell
: Funzionare, funziona. Però mi chiede un decompressore gzip e tar e per
: windows non ne ho trovato che funzionino da riga di comando (uso
Non so, hai provato su qualche sito di ricerca? Sono sicuro che
esistano, perche` li ho visti installati su macchine Win, ma non ti so
dare gli URL.
: winzip, normalmente), inoltre pretende di scaricarli dal sito anche
: quando li ho su HD.
Modifica MyConfig.pm . Sotto unix e` in .cpan/CPAN ...


Modifica MyConfig.pm . Sotto unix e` in .cpan/CPAN ...
Fatto, mi risponde "protocollo non valido"; in pratica deve iniziare
con ftp o http! :-(((
Mi sa che farò come ho fatto altre volte: installo minilinux sul pc
dove deve finire questo modulo, installo il perl e quindi tutti i
moduli e trasferisco la directory lib su windows. E' un metodo
barbaro, nonchè poco sicuro però mi sembra l'unica via d'uscita.
Grazie comunque
Andrea

 wrote:
:>Modifica MyConfig.pm . Sotto unix e` in .cpan/CPAN ...
: Fatto, mi risponde "protocollo non valido"; in pratica deve iniziare
: con ftp o http! :-(((
Penso che ci sia qualcosa che non vada nel modulo che usi (versione
vecchia?), oppure nel modo in cui specifichi il protocollo "file:".
A me con:
'urllist' =>  [q[file:/home/nando/.cpan/]],
funziona, anzi ha funzionato nonostante la prima volta che ho provato
avessi fatto un errore di battitura nell'URL... me l'ha corretto!
A pensarci bene forse il tuo problema ha a che fare con il modo in cui
si specifica il path di un file sotto DOS, con il disco e i backslash.
Forse devi raddoppiare i backslash?


Forse devi raddoppiare i backslash?
No, no. Ho risolto il problema, non voleva la 'q' iniziale (?).
Ora però si blocca la momento del make test e ovviamente del make
install, e ha ragione. Come cavolo faccio a far fare un make su
windows?
Inoltre io ho scaricato mysql per windows da 
www.tcx.se
, ma il modulo
DBD::mysql va a cercare alcuni file mysqlclient.a (o qualcosa del
genere) sulla directory del mysql, ma io quei files non li ho nè in
quella directory nè da altre parti, sono necessari per il
funzionamento del modulo?
Ho il DBI 0.93 e il modulo mysql versione 1.1830
Ciao
Andrea

 wrote:
: Ora perň si blocca la momento del make test e ovviamente del make
: install, e ha ragione. Come cavolo faccio a far fare un make su
: windows?
Devi procurarti un make funzionante, ma non ti so dare info al riguardo.
: Inoltre io ho scaricato mysql per windows da 
www.tcx.se
, ma il modulo
: DBD::mysql va a cercare alcuni file mysqlclient.a (o qualcosa del
: genere) sulla directory del mysql, ma io quei files non li ho nč in
: quella directory nč da altre parti, sono necessari per il
: funzionamento del modulo?
No, ma lo sono per la compilazione. Un file che termina per .a in Unix
e` una libreria, quindi dovresti anche modificarti il make in modo
appropriato: .a -> .lib, .o -> .obj, ecc.


appropriato: .a -> .lib, .o -> .obj, ecc.
c'è un file con lo stesso nome ma estenzione .lib, basterà rinominarlo
quindi. Giusto?
Ciao
Andrea

 quindi. Giusto?
Sbagliato. Se gia' possiedi il .lib *non* rinominarlo. In questo
momento,
il tuo problema e' che ti manca un ambiente di sviluppo (linker,
compilatore, make, etc. - ah, la bellezza di M$) - una volta che ti sei
procurato tale ambiente, e hai fatto quanto detto sopra (a mano o con
CPAN, e' indifferente) Il makefile potrebbe/dovrebbe gia' essere
corretto.
Se non lo fosse, apri Makefile.PL col tuo editor preferito e cerca 
qualcosa che assomglia a:
WriteMakefile(
'NAME' => 'Foo',
[...]
'LIBS'     => ['C:\un\path\unalib.lib ... '],
[...]
);
E inserisci il percorso a mysql.lib (se l'opzione LIBS non esiste,
aggiungila.
Cheers,
	Alessandro

qualcosa che assomglia a:
Ciao
Andrea

 Me lo fa con qualsiasi modulo.
Questo e' il motivo per cui non mi sento di consigliare Cygwin
per un uso 'casuale'.
'missing separator' probab. si rifersce a caratteri <TAB> mancanti 
nel makefile, ma (suppongo) che il problema sia piu' radicale.
Infatti, il tuo perl (ActiveState, credo di ricordare), con ogni
probabilita' sa - tramite Configure.pm e compagnia - di essere stato
compilato con opzioni, librerie, etc. derivate da un ambiente di
sviluppo  "xxxx" che con ogni probabilita' *NON* e' cygwin32. 
Come conseguenza tutto il Makefile generato da perl Makefile.PL e'
sbagliato perche' contiene parametri adatti a nmake e cl (assumendo che
sia stato usato devstudio) e non per make, gcc e cygwin32.
Ora io non  escludo che sia possibile adattare tutto il pasticcio a
funzionare con gcc, ma questo, come minimo, richiede di modificare
manualmente Makefile.PL sovrascrivendo a mano i vari CFLAGS, LIBS, etc.
che perl desume da Configure.pm, il che richiede notevole esperinza di
arti magiche e non credo ne valga la pena.
Se proprio vuoi usare cygwin, ti conviene allora ricompilare perl in 
quell'ambiente (auguri).
HTH & cheers,
	Alessandro