lobotomy
LOBOTOMY PROJECT

hyppocampus
HYPPOCAMPUS PROJECT

Organizzazione logica dei metadati
(v0.1, 21.8.2005)



Abstract
Viene qui illustrata una proposta di organizzazione dei metadati assegnabili ai files nel filesystem Hyppocampus: l'elenco e' in costante aggiornamento, ed ogni proposta di nuovi tipi di metadato e' benvenuta.



Sommario:

Introduzione
Onde permettere una piu' facile interoperabilita' tra diversi sistemi ed al fine di organizzare al meglio le informazioni che verranno immagazzinate nel filesystem Hyppocampus, i tipi di metadato assegnabili ai files non verranno inventati sul momento dall'utente ma potranno essere selezionati da una lista unica, comune per tutti ed aggiornata da un'unica entita' (il team Hyppocampus).
Ogni tipo verra' identificato da un numero senza segno a 32 bit, ed una speciale tabella posta in un'area riservata del filesystem conterra' le descrizioni di ogni tipo: il suo nome utente (opportunamente trattato secondo la "locale" settata nel sistema), le sue proprieta', il tipo di valore che contiene (int, char, long...).

Le classi
Dato l'enorme numero di potenziali metadati (4.294.967.296) si crede opportuno suddividere tale quantita' in diverse "classi" di metadati, ognuna delle quali dedicata ad uno specifico MIME-type: la suddivisione dovrebbe essere fatta seguendo le proprieta' matematiche della struttura dati atta a contenerli (cfr. "Modello di Disposizione dei Metadati: Array Linkato"), si' da non incidere negativamente sulle funzioni di ricerca ed anzi favorirle.
Sul sito dello IANA si trova la lista dei MIME-types standard, universalmente riconosciuti: questi sono di otto tipologie, e bastano a ricoprire un po' tutti i tipi di files in cui ci si puo' imbattere.
Ad ognuno di questi tipi si puo' assegnare una "classe" di metadati, nonche' aggiungere alcune "classi" speciali: innanzitutto, considerando che ogni parametro di un file verra' espresso in Hyppocampus sotto la veste di metadato, bisogna prevedere una classe speciale che include ogni sorta di elemento che appare nel filesystem; nella previsione di conservare nel filesystem alcuni dati "discreti" (i contatti di e-mail, i parametri di configurazione delle applicazione etc...) bisogna inoltre prevedere una classe per questi "pseudo-file".
In generale, possiamo ipotizzare 16 classi (di cui alcune riservate per usi futuri), e, calcolatrice alla mano, si vede che per ogni classe trovano spazio 268.435.456 tipi di metadato, ragionevolmente sufficienti per descrivere ogni sorta di file.

Suddivisione delle classi
Ricordiamo che (come descritto nel documento "Modello di Disposizione dei Metadati: Array Linkato") tutti i metadati sono suddivisi in 65536 (2^16) array, ed in ogni array si trovano, ordinatamente, tutti i metadati il cui tipo e' tipo_metadato % 65536 = numero_array.
Si puo' facilmente prevedere che, all'esecuzione di una query di ricerca, i tipi di metadato coinvolti siano in larga parte appartenenti ad una stessa classe, dunque, per facilitare la ricerca, si puo' pensare che mettendo nello stesso array tutti i metadati di una stessa classe si possano velocizzare le operazioni di individuazione del sottoarray di interesse (in quanto non tocca ogni volta ricominciare dall'inizio di uno degli array primari, ma procedendo sempre nello stesso). Alla luce di questa osservazione, si possono sfruttare le proprieta' matematiche dei numeri che identificano i tipi di metadato per fissare i limiti entro cui una classe finisce ed inizia la successiva.
Sempre con la calcolatrice alla mano, si vede che se si hanno 65536 array e 16 classi, ogni classe raccoglie 4096 array; poiche' i metadati si trovano negli array in facolta' del loro "hash" (tipo_metadato % 65535 = numero_array), si puo' dire che si puo' risalire alla classe di un metadato usando la semplice equazione
4096 * numero_classe = tipo_metadato % 65536
e, inversamente:
numero_classe = ( tipo_metadato % 65536 ) / 4096

Classe 1: Generics
GENERAL
ID metadato array pos. in array nome utente tipo valore note
0 0 0
ID
unsigned long

1 1
0
nome
char []

2 2
0
utente proprietario
unsigned int

3 3
0
gruppo proprietario
unsigned int

4 4
0
permessi
unsigned long
espresso nel formato Unix: trwxrwxrwx
5 5
0
path assoluto
char []
mantenuto per compatibilita'
6 6
0
data creazione
time_t
Unix time
7 7
0
data ultima e penultima modifica
time_t [2]
8 8
0
data ultima e penultima richiesta
time_t [2]
9 9
0
dimensione
unsigned long long

10 10
0
indirizzi blocchi 1-2
unsigned long [2]
cfr. indicizzazione in EXT2
11 11
0
indirizzi blocchi 3-4
unsigned long [2]
12 12
0
indirizzi blocchi 5-6 unsigned long [2]
13 13
0
indirizzi blocchi 7-8
unsigned long [2]
14 14
0
indirizzi blocchi 9-10
unsigned long [2]
15 15
0
indirizzi blocchi 11-12
unsigned long [2]
16 16
0
indirizzo blocco indicizzazione singola e doppia
unsigned long [2]
17 17
0
indirizzo blocco indicizzazione tripla e quadrupla
unsigned long [2]
18
18
0
MIME-type
char []




Classe 2: Text
TEXT
ID metadato
array
pos. in array
nome utente
tipo valore
note
4096
4096
0






Classe 3: Message
MESSAGE
ID metadato
array
pos. in array
nome utente
tipo valore
note
8192
8192
0






Classe 4: Application
APPLICATION
ID metadato
array
pos. in array
nome utente
tipo valore
note
12288
12288
0






Classe 5: Images
IMAGES
ID metadato
array
pos. in array
nome utente
tipo valore
note
16384
16384
0
altezza
unsigned long long

16385 16385 0
larghezza
unsigned long long

16386 16386 0
risoluzione x
unsigned long long

16387 16387 0
risoluzione y
unsigned long long

16388 16388 0
colore
enum
0 = RGB
1 = Grayscale



Classe 6: Audio
AUDIO
ID metadato
array
pos. in array
nome utente
tipo valore
note
20480
20480
0






Classe 7: Video
VIDEO
ID metadato
array
pos. in array
nome utente
tipo valore
note
24576
24576
0






Classe 8: Model
MODEL
ID metadato
array
pos. in array
nome utente
tipo valore
note
28672
28672
0






Classe 9: Multipart
MULTIPART
ID metadato
array
pos. in array
nome utente
tipo valore
note
32768
32768
0






Unused
ID metadato
array
pos. in array
nome utente
tipo valore
note







ID metadato
array
pos. in array
nome utente
tipo valore
note







ID metadato
array
pos. in array
nome utente
tipo valore
note







ID metadato
array
pos. in array
nome utente
tipo valore
note







ID metadato
array
pos. in array
nome utente
tipo valore
note







ID metadato
array
pos. in array
nome utente
tipo valore
note







ID metadato
array
pos. in array
nome utente
tipo valore
note









Links


Copyright © 2005 - Roberto -MadBob- Guido