Giorgio CalderoneBologna, 14/12/2006 Software per database a supporto di progetti di ricerca...
-
Upload
annunziata-montanari -
Category
Documents
-
view
216 -
download
1
Transcript of Giorgio CalderoneBologna, 14/12/2006 Software per database a supporto di progetti di ricerca...
Giorgio Calderone Bologna, 14/12/2006
Software per database a supporto di Software per database a supporto di progetti di ricerca astronomici:progetti di ricerca astronomici:
MCS, MyRO, DIFMCS, MyRO, DIF
Software a supporto dei progetti di ricerca: MCS, MyRO e DIF
Presentazioni:
● MCS: My Customizable Server:● Accesso a database;● Implementazione servizi informativi;● Gestione file VOTable;
● MyRO: My Record Oriented privilege system:● Struttura per la gestione di account utente;● Privilegi a livello di record;
● DIF: Dynamical Index Facility:● Link a librerie HTM e HealPix;
Software a supporto dei progetti di ricerca: MCS, MyRO e DIF
MCS: My Customizable Server
I sistemi informativi si possono dividere in due categorie:
Indirizzati agli esseri umani
Indirizzati ad altri sistemi informatici
Web server, scripting language, HTML protocol
Nessuna standardizzazione ==> MCS
Software a supporto dei progetti di ricerca: MCS, MyRO e DIF
MCS: My Customizable ServerCome può un sistema informativo fare da supporto a un progetto scientifico ?
● Dati scientifici e di house-keeping:● Backup e validazione;● Quick-look ed eventuale automatizzazione del sistema;
● Accesso per ricercatori:● Accesso ai dati da vari linguaggi di programmazione: C, C++, Fortran,
IDL;● Possibilità di installare facility per una analisi veloce dei dati;● Possibilità di download dei dati grezzi;
● Accesso per tecnici;● Possibilità di monitoraggio e controllo remoto del sistema;
● Accesso dal pubblico (outreach):● Generazione automatica di statistiche e pagine web con ultime immagini,
ecc...
Software a supporto dei progetti di ricerca: MCS, MyRO e DIF
MCS: My Customizable Server
● Interfaccia di accesso di alto livello, ad esempio:● “Seleziona le osservazioni fatte in data...”;● “Seleziona tutte le osservazioni della zona di cielo...”;● “Seleziona le osservazioni in cui la temperatura dello strumento è
minore ...”;
● Possibilità di scambio di file in diversi formati:● Ascii, FITS, VOTable, ecc...
Come può un sistema informativo fare da supporto a un progetto scientifico ?
...tutto questo è possibile con MCS !
Software a supporto dei progetti di ricerca: MCS, MyRO e DIF
MCS: My Customizable Server
● Server TCP multithread;● Facilità di configurazione;● Autenticazione e supporto di permessi utente;● Connessioni sicure (tramite SSL);● Accesso a database (MySQL);● Supporto per la personalizzazione del server;● Accessiblità da diversi linguaggi di programmazione: C, C++, Fortran, IDL,
PHP, Python (in futuro anche Java e Perl);
Le caratteristiche del server MCS sono:
● Aggiungendo programmi di analisi esterni, sia binari che BATCH di comandi MCS;
● Aggiungendo programmi SQL (da eseguire sul server MySQL);● Aggiungendo comandi personalizzati (derivando la classe “UserThread”);● Modificando il comportamento del thread lato server (derivando la classe
“LocalThread”);
La “personalizzazione” del server può essere realizzata:
Software a supporto dei progetti di ricerca: MCS, MyRO e DIF
MCS: My Customizable Server
Eventi durante una tipica sessione MCS:
Software a supporto dei progetti di ricerca: MCS, MyRO e DIF
MCS: My Customizable Server
Architettura del sistema informativo:
Software a supporto dei progetti di ricerca: MCS, MyRO e DIF
MCS: My Customizable ServerCodice minimo per un server MCS:
#include <mcs.hh>using namespace mcs;
int main(int argc, char *argv[]) { Env* env = mcsStart("test"); mcsWait(env);}
Software a supporto dei progetti di ricerca: MCS, MyRO e DIF
MCS: My Customizable ServerAggiunta di un comando personalizzato:MCS_CUSTOM_USER(User);RetValue hk_exec(CommandParser* cmd, bool& cmd_executed){ if (! loginok) return OK;
if (cmd_executed = cmd->cmpCmd("HISTO")) { if (cmd->argc() < 1) //Check number of arguments return Send( MCS_ERROR( MSG_MISSING_ARGUMENT, "filename"));
... computation ...
Data d(FLOAT); Send(d); Send(file); }} MCS_CUSTOM_USER_END(User);
Software a supporto dei progetti di ricerca: MCS, MyRO e DIF
MCS: My Customizable ServerPersonalizzazione server thread:MCS_CUSTOM_LOCAL(Local);void run() { for(;;) { s = "QRY SELECT * FROM Producer_log”; if (prod->exec(s)) { Record& rec = prod->rec(); q->prepare_with_parameters(MCS_INSERT, "*", "Mainsrv_log”); q->param()["id"] = rec["id"];
q->param()["camera"] = rec["camera"]; q->param()["filename"] = rec["filename"];
query->execute(); } }}MCS_CUSTOM_LOCAL_END(Local);
Software a supporto dei progetti di ricerca: MCS, MyRO e DIF
MCS: My Customizable ServerCodice client (IDL):
cli = new_Client(null, "", "localhost", 9001, 0)dummy = Client_login(cli, 'demo_mcs', 'demo_mcs', 'demo_mcs')
dummy = Client_exec(cli, 'qry SELECT camera, filename, datein, exposure FROM Mainsrv_log', null)nrows = RecordSet_nRows(cli)
cmd = "histo " + name + ".fits.gz"dummy = Client_exec(cli, cmd, null)
cmd = "get " + name + "_h.gif"dummy = Client_exec(cli, cmd, null)
Software a supporto dei progetti di ricerca: MCS, MyRO e DIF
MCS: My Customizable ServerCodice client (Fortran):
cli = new_Client(null, "", "localhost", 9001, 0)dummy = Client_login(cli, 'demo_mcs', 'demo_mcs', 'demo_mcs')
dummy = Client_exec(cli, 'qry SELECT camera, filename, datein, exposure FROM Mainsrv_log', null)nrows = RecordSet_nRows(cli)
WRITE(cmd, '(A6, A10, A8)'), "histo ", , ".fits.gz"dummy = Client_exec(cli, cmd, null)
WRITE(cmd, '(A4, A10, A6)'), "get ", s, "_h.gif"dummy = Client_exec(cli, cmd, null)
Software a supporto dei progetti di ricerca: MCS, MyRO e DIF
MCS: My Customizable ServerInterfaccia grafica (PHP):
Informazioni generate dinamicamente
Informazioni lette da DB
Accesso ai comandi personalizzati
Software a supporto dei progetti di ricerca: MCS, MyRO e DIF
MCS: My Customizable Server
Show as gif: Get image pix. statistics
Software a supporto dei progetti di ricerca: MCS, MyRO e DIF
VOTable: il formato definito dal Virtual Observatory
● Struttura keyword;● Non è necessaria la keyword NAXIS2 (numero di record);● Quindi un file VOTable è “streamable”;● Possono contenere solo “metadata” e link ai dati effettivi;● I dati possono essere inclusi in VOTable in vari formati (serialization):
● Tabella HTML;● Formato binario dedicato;● File Fits (codificato con Base64);
Quali sono i principali vantaggi rispetto al formato FITS ?
Software a supporto dei progetti di ricerca: MCS, MyRO e DIF
MCS: le classi per l'accesso ai VOTable
● VOT_Element● VOT_Binary● VOT_Column● VOT_Coosys● VOT_Data● VOT_Definitions● VOT_Description● VOT_Field● VOT_FieldRef● VOT_Fits● VOT_Group● VOT_Info● VOT_Link● VOT_Max● VOT_Min
● VOT_Parser_Stream● VOT_Parser_Tree● VOT_Writer_Stream (ancora in fase
di sviluppo)
● VOT_Option● VOT_Param● VOT_ParamRef● VOT_Resource● VOT_Row● VOT_Stream● VOT_Table● VOT_Tabledata● VOT_Values● VOT_VOTable
Software a supporto dei progetti di ricerca: MCS, MyRO e DIF
Per ogni possibile nodo XML esiste una classe
<?xml version="1.0"?><VOTABLE version="1.1"> <COOSYS ID="J2000" equinox="J2000." epoch="J2000." system="eq_FK5"/> <RESOURCE name="myFavouriteGalaxies"> <TABLE name="results"> <DESCRIPTION>Velocities and Distance estimations</DESCRIPTION> <PARAM name="Telescope" datatype="float" ucd="phys.size;instr.tel" unit="m" value="3.6"/> <FIELD name="RA" ID="col1" ucd="pos.eq.ra;meta.main" ref="J2000" datatype="float" width="6" precision="2" unit="deg"/> <FIELD name="Dec" ID="col2" "pos.eq.dec;meta.main" ref="J2000" datatype="float" width="6" precision="2" unit="deg"/> <FIELD name="Name" ID="col3" ucd="meta.id;meta.main" datatype="char" arraysize="8*"/> <DATA> <TABLEDATA> <TR> <TD>010.68</TD><TD>+41.27</TD><TD>N 224</TD> </TR> <TR> <TD>287.43</TD><TD>-63.85</TD><TD>N 6744</TD> </TR> </TABLEDATA> </DATA> </TABLE> </RESOURCE></VOTABLE>
VOT_VOTable
VOT_Resource
VOT_Param
VOT_Field
VOT_Data
VOT_Row
VOT_Column
Software a supporto dei progetti di ricerca: MCS, MyRO e DIF
Gli attributi dei nodi sono anche attributi della classe
Accesso a un nodo di tipo “FIELD”:
VOT_Field* field = stream->next()field->name()field->ID()field->ucd()field->datatype()field->width()field->precision()field->unit
<FIELD name="RA" ID="col1" ucd="pos.eq.ra;meta.main" ref="J2000" datatype="float" width="6" precision="2" unit="deg"/>
Software a supporto dei progetti di ricerca: MCS, MyRO e DIF
Lettura di un file VOTableModalità stream:
VOT_Parser_Stream stream;stream.open(“filename.vot”);
while ((node = stream.next())) { node->print(true);}stream.close();
● I nodi sono letti uno per uno;● Non è disponibile l'intera struttura del file VOTable;● E' richiesta poca memoria;● Il codice per leggere e stampare tutto il contenuto del file è:
Software a supporto dei progetti di ricerca: MCS, MyRO e DIF
Lettura di un file VOTableModalità tree:
VOT_Parser_Tree tree();tree.open(“filename.vot”);tree.root()->print(true);
● I nodi sono letti tutti in una volta;● E' disponibile l'intera struttura del file VOTable, ed è
navigabile;● E' richiesta una quantità di memoria dell'ordine delle
dimensioni del file;● Il codice per leggere, stampare tutto il contenuto del file è:
● Per recuperare un valore dalla struttura:tree.root()->Resource(2)->Table(1) ->Data()->TableData()->Row(0)->Column(5) ->value()
Software a supporto dei progetti di ricerca: MCS, MyRO e DIF
Nuove classi per gestione VOTable(ancora in fase di test)
● Lettura dei dati in tutti i tipi di serializazzione (HTML table, binary, fits, fits remoto);
● Incapsula le chiamate alla libreria FITSIO;● Validazione tramite DTD (Document Type Definition);● Modalità di lettura : stream o tree;● Capacità di streaming da rete;● Interfaccia derivata dalla class mcs::Recordset;
E' l'unica interfaccia C++ con tutte queste caratteristiche !!!
Software a supporto dei progetti di ricerca: MCS, MyRO e DIF
MyRO: My Record Oriented privilege system
MySQL gestisce permessi a livello di● Database;● Tabella;● Campo all'interno di una tabella;
Ma non a livello di record !!!
MyRO permette di gestire i permessi a livello di record.
Software a supporto dei progetti di ricerca: MCS, MyRO e DIF
MyRO: My Record Oriented privilege system
Per ogni record i permessi sono simili a quelli di un file su un file system UNIX:
Senza MyRO:
mysql> select * from tab;+---+------+------+------+| i | c | f1 | f2 |+---+------+------+------+| 1 | A | 2.3 | 4.5 | | 2 | B | 0 | 0 | | 3 | C | -1 | -2 | +---+------+------+------+
mysql> select * from tab;+---------+----------+----------+---+------+------+------+| my_user | my_group | my_fperm | i | c | f1 | f2 |+---------+----------+----------+---+------+------+------+| root | root | rwr--- | 1 | A | 2.3 | 4.5 | | test | users | rwr-r- | 2 | B | 0 | 0 | | root | root | rwrwrw | 3 | C | -1 | -2 | +---------+----------+----------+---+------+------+------+
Con MyRO:
Software a supporto dei progetti di ricerca: MCS, MyRO e DIF
MyRO: My Record Oriented privilege system
Come funziona MyRO ?
mysql> select * from tab_myro;+---+------+------+------+| i | c | f1 | f2 |+---+------+------+------+| 1 | A | 2.3 | 4.5 || 2 | B | 0 | 0 || 3 | C | -1 | -2 |+---+------+------+------+
1) Si aggiungono i campi per utente proprietario, gruppo e permessi
mysql> select * from tab_myro;+---+------+------+------+--------+--------+---------+| i | c | f1 | f2 | my_uid | my_gid | my_perm |+---+------+------+------+--------+--------+---------+| 1 | A | 2.3 | 4.5 | 1 | 2 | 1 | | 2 | B | 0 | 0 | 3 | 3 | 2 | | 3 | C | -1 | -2 | 1 | 1 | 6 | +---+------+------+------+--------+--------+---------+
2) Si crea una view che filtra solo i record che possono essere lettiCREATE VIEW tab ASSELECT tab_myro.*FROM tab_myroWHERE (myro_cGranted(user(), my_perm, my_uid, my_gid, 'r') = 1);
Software a supporto dei progetti di ricerca: MCS, MyRO e DIF
MyRO: My Record Oriented privilege system
Risultati diversi con account diversi
+---------+----------+----------+---+------+------+------+| my_user | my_group | my_fperm | i | c | f1 | f2 |+---------+----------+----------+---+------+------+------+| test | users | rwr-r- | 2 | B | 0 | 0 | | root | root | rwrwrw | 3 | C | -1 | -2 | +---------+----------+----------+---+------+------+------+
Selezione effettuata tramite l'account 'test':
Selezione effettuata tramite l'account 'root':+---------+----------+----------+---+------+------+------+| my_user | my_group | my_fperm | i | c | f1 | f2 |+---------+----------+----------+---+------+------+------+| root | root | rwr--- | 1 | A | 2.3 | 4.5 | | test | users | rwr-r- | 2 | B | 0 | 0 | | root | root | rwrwrw | 3 | C | -1 | -2 | +---------+----------+----------+---+------+------+------+
Software a supporto dei progetti di ricerca: MCS, MyRO e DIF
DIF: Dynamical Index Facility
“ Far funzionare i programmi è facile, il difficile è farli andare veloci !”
● HTM (Hierarchical Triangular Mesh):
● HealPix (Hierarchical Equal Area isoLatitude Pixelization):
Software a supporto dei progetti di ricerca: MCS, MyRO e DIF
DIF: Dynamical Index Facility
Vogliamo utilizzare l'indice sul campo “htmID”
● Secondo esempio:
SELECT * FROM Messier WHERE htmID IN (29572, 14638, ...);
CREATE TABLE tmp (HTMid INT);INSERT INTO tmp VALUES(29572);INSERT INTO tmp VALUES(14638);...
SELECT * FROM Messier INNER JOIN tmp USING (htmID);
DROP TABLE tmp;Altre soluzioni ?
● Primo esempio
Software a supporto dei progetti di ricerca: MCS, MyRO e DIF
DIF: Dynamical Index Facility
Il DIF permette di creare “dinamicamente” la tabella degli HTM id.Il DIF è composto da:
● Una tabella fittizia (non occupa spazio su disco);● Una UDF (User Defined Function) che popola “dinamicamente” la
tabella;
Nel nostro caso:● La tabella si chiama “dif”;● Vi sono diverse UDF che popolano la tabella “dif”, useremo
“HTM_Circle”;SELECT * FROM dif; #Non produce alcun risultato SELECT * FROM dif WHERE HTM_Circle(83.6, 22.0, 2);
Software a supporto dei progetti di ricerca: MCS, MyRO e DIF
DIF: Dynamical Index Facility
Mettiamo tutto insieme
● La query completa:SELECT Messier.* FROM Messier INNER JOIN dif USING (htmID)WHERE HTM_Circle(@Ra, @Dec, @Rad);
∞:1
SELECT Messier.* FROM Messier INNER JOIN dif USING (htmID)WHERE (HTM_Circle(@Ra, @Dec, @Rad) AND ( (htmFull = 1) OR (sphedist(@Ra,@Dec,Ra,Dec) <@Rad)) );
● Selezione su un cerchio perfetto:
Software a supporto dei progetti di ricerca: MCS, MyRO e DIF
Database Engines per VOTable e FITS
● Mysql offre l'opportunità di creare database Engine:
● Si tratta di software che permette di integrare qualsiasi tipo di file all'interno del DBMS;
● Si possono quindi fare i operazioni di lettura e scrittura su questi file come se fossero normali tabelle, in maniera completamente trasparente;
● Stiamo lavorando ad un database Engine per l'accesso a file FITS e VOTable;
● Questi file si possono quindi leggere utilizzando le classi di MCS;
Software a supporto dei progetti di ricerca: MCS, MyRO e DIF
Librerie di uso comune in astronomia
● Astrometria, conversione di coordinate e di date (NOVAS);● http://aa.usno.navy.mil/software/novas/novas_info.html
● WCS (World Coordinate System);● http://tdc-www.harvard.edu/software/wcstools
● Ecc..
Aggiunta della possibilità di chiamare routine esterne di uso comune, con la stessa sintassi da qualsiasi linguaggio di programmazione.
Software a supporto dei progetti di ricerca: MCS, MyRO e DIF
Cercasi collaborazione per futuri sviluppi:● Proposte di nuove funzionalità, critiche su quelle esistenti;● Test del software;● Scrittura documentazione ed esempi;“Contributed library facilities” per i vari linguaggi (C, IDL, Fortran, Python,
PHP, Perl, Java)● Implementazione classe VOTable_Writer_Stream;● Database engine VOTable e FITS;
● Implementazione interfacce a NOVAS, WCS, ecc...;● Interfaccia per facility di Virtual Observatory (PLASTIC);● Analizzare la portabilità su altri DBMS;● Porting su altre piattaforme (UNIX e Windows);
Links:● MCS, MyRO:
● http://ross.iasfbo.inaf.it/mcs● IDL user contributed library :
● http://ross.iasfbo.inaf.it/mcs-download/mcs_usrlib.pro