Title: Giorgio Calderone
1Software per database a supporto di progetti di
ricerca astronomici MCS, MyRO, DIF
Giorgio Calderone
Bologna, 14/12/2006
2Presentazioni
- 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
3MCS My Customizable Server
I sistemi informativi si possono dividere in due
categorie
Indirizzati agli esseri umani
Web server, scripting language, HTML protocol
Indirizzati ad altri sistemi informatici
Nessuna standardizzazione gt MCS
4MCS My Customizable Server
Come 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...
5MCS My Customizable Server
Come può un sistema informativo fare da supporto
a un progetto scientifico ?
- 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...
...tutto questo è possibile con MCS !
6MCS My Customizable Server
Le caratteristiche del server MCS sono
- 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)
La personalizzazione del server può essere
realizzata
- 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)
7MCS My Customizable Server
Eventi durante una tipica sessione MCS
8MCS My Customizable Server
Architettura del sistema informativo
9MCS My Customizable Server
Codice minimo per un server MCS
include ltmcs.hhgt using namespace mcs int
main(int argc, char argv) Env env
mcsStart("test") mcsWait(env)
10MCS My Customizable Server
Aggiunta di un comando personalizzato
MCS_CUSTOM_USER(User) RetValue
hk_exec(CommandParser cmd, bool
cmd_executed) if (! loginok) return OK if
(cmd_executed cmd-gtcmpCmd("HISTO")) if
(cmd-gtargc() lt 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)
11MCS My Customizable Server
Personalizzazione server thread
MCS_CUSTOM_LOCAL(Local) void run() for()
s "QRY SELECT FROM Producer_log if
(prod-gtexec(s)) Record rec
prod-gtrec() q-gtprepare_with_parameters(MCS_I
NSERT, "", "Mainsrv_log) q-gtparam()"id"
rec"id" q-gtparam()"camera"
rec"camera" q-gtparam()"filename"
rec"filename" query-gtexecute()
MCS_CUSTOM_LOCAL_END(Local)
12MCS My Customizable Server
Codice 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)
13MCS My Customizable Server
Codice 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)
14MCS My Customizable Server
Interfaccia grafica (PHP)
Informazioni generate dinamicamente
Informazioni lette da DB
Accesso ai comandi personalizzati
15MCS My Customizable Server
Show as gif
Get image pix. statistics
16VOTable il formato definito dal Virtual
Observatory
Quali sono i principali vantaggi rispetto al
formato FITS ?
- 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)
17MCS 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_Option
- VOT_Param
- VOT_ParamRef
- VOT_Resource
- VOT_Row
- VOT_Stream
- VOT_Table
- VOT_Tabledata
- VOT_Values
- VOT_VOTable
- VOT_Parser_Stream
- VOT_Parser_Tree
- VOT_Writer_Stream (ancora in fase di sviluppo)
18Per ogni possibile nodo XML esiste una classe
lt?xml version"1.0"?gt ltVOTABLE version"1.1"gt
ltCOOSYS ID"J2000" equinox"J2000."
epoch"J2000." system"eq_FK5"/gt ltRESOURCE
name"myFavouriteGalaxies"gt ltTABLE
name"results"gt ltDESCRIPTIONgtVelocities and
Distance estimationslt/DESCRIPTIONgt ltPARAM
name"Telescope" datatype"float"
ucd"phys.sizeinstr.tel" unit"m"
value"3.6"/gt ltFIELD name"RA" ID"col1"
ucd"pos.eq.rameta.main" ref"J2000"
datatype"float" width"6" precision"2"
unit"deg"/gt ltFIELD name"Dec" ID"col2"
"pos.eq.decmeta.main" ref"J2000"
datatype"float" width"6" precision"2"
unit"deg"/gt ltFIELD name"Name" ID"col3"
ucd"meta.idmeta.main"
datatype"char" arraysize"8"/gt ltDATAgt
ltTABLEDATAgt ltTRgt
ltTDgt010.68lt/TDgtltTDgt41.27lt/TDgtltTDgtN 224lt/TDgt
lt/TRgt ltTRgt
ltTDgt287.43lt/TDgtltTDgt-63.85lt/TDgtltTDgtN 6744lt/TDgt
lt/TRgt lt/TABLEDATAgt lt/DATAgt
lt/TABLEgt lt/RESOURCEgt lt/VOTABLEgt
VOT_VOTable
VOT_Resource
VOT_Param
VOT_Field
VOT_Data
VOT_Row
VOT_Column
19Gli attributi dei nodi sono anche attributi della
classe
Accesso a un nodo di tipo FIELD
ltFIELD name"RA" ID"col1"
ucd"pos.eq.rameta.main" ref"J2000"
datatype"float" width"6" precision"2"
unit"deg" /gt
VOT_Field field stream-gtnext() field-gtname() fi
eld-gtID() field-gtucd() field-gtdatatype() field-gtwi
dth() field-gtprecision() field-gtunit
20Lettura di un file VOTable
Modalità stream
- 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 è
VOT_Parser_Stream stream stream.open(filename.vo
t) while ((node stream.next()))
node-gtprint(true) stream.close()
21Lettura di un file VOTable
Modalità tree
- 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
VOT_Parser_Tree tree() tree.open(filename.vot)
tree.root()-gtprint(true)
tree.root()-gtResource(2)-gtTable(1)
-gtData()-gtTableData()-gtRow(0)-gtColumn(5)
-gtvalue()
22Nuove 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 mcsRecordset
E' l'unica interfaccia C con tutte queste
caratteristiche !!!
23MyRO 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.
24MyRO My Record Oriented privilege system
Per ogni record i permessi sono simili a quelli
di un file su un file system UNIX
mysqlgt select from tab --------------------
- i c f1 f2 ----------------
----- 1 A 2.3 4.5 2 B
0 0 3 C -1 -2
---------------------
Senza MyRO
Con MyRO
mysqlgt 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
-------------------------------------------
-------
25MyRO My Record Oriented privilege system
Come funziona MyRO ?
1) Si aggiungono i campi per utente proprietario,
gruppo e permessi
mysqlgt select from tab_myro ---------------
------ i c f1 f2
--------------------- 1 A 2.3
4.5 2 B 0 0 3 C
-1 -2 ---------------------
mysqlgt 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 letti
CREATE VIEW tab AS SELECT tab_myro. FROM
tab_myro WHERE (myro_cGranted(user(), my_perm,
my_uid, my_gid, 'r') 1)
26MyRO My Record Oriented privilege system
Risultati diversi con account diversi
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 -------------------------------------
-------------
Selezione effettuata tramite l'account 'test'
--------------------------------------------
------ 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
-------------------------------------------
-------
27DIF Dynamical Index Facility
Far funzionare i programmi è facile, il
difficile è farli andare veloci !
- HTM (Hierarchical Triangular Mesh)
- HealPix (Hierarchical Equal Area isoLatitude
Pixelization)
28DIF Dynamical Index Facility
Vogliamo utilizzare l'indice sul campo htmID
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 ?
29DIF 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)
30DIF Dynamical Index Facility
Mettiamo tutto insieme
SELECT Messier. FROM Messier INNER JOIN dif
USING (htmID) WHERE HTM_Circle(_at_Ra, _at_Dec, _at_Rad)
- Selezione su un cerchio perfetto
SELECT Messier. FROM Messier INNER JOIN dif
USING (htmID) WHERE (HTM_Circle(_at_Ra, _at_Dec, _at_Rad)
AND ( (htmFull 1) OR
(sphedist(_at_Ra,_at_Dec,Ra,Dec) lt_at_Rad)) )
81
31Database 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
32Librerie di uso comune in astronomia
Aggiunta della possibilità di chiamare routine
esterne di uso comune, con la stessa sintassi da
qualsiasi linguaggio di programmazione.
- 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..
33Cercasi 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