![]() |
Show 150 posts per page |
.dsy:it. (http://www.dsy.it/forum/)
- Tech (http://www.dsy.it/forum/forumdisplay.php?forumid=189)
-- [PROGETTO] Database nativo Xml (http://www.dsy.it/forum/showthread.php?threadid=20135)
[PROGETTO] Database nativo Xml
E' un pò di tempo che ho intenzione di iniziare un progetto di realizzazione di un database nativo in Xml, da utilizzare come contenitore dei dati per una classe di applicazioni CMS e PMS per il Web. Ora, ho osservato le API Open Source dell'Xml:db Project, e ne ho raccolto qualche informazione. Ho osservato i prodotti già esistenti (non molti a dire il vero) e ho constatato che la loro complessità è nettamente superiore a quanto avrei bisogno io.
Punti chiave:
- deve contenere solo testo... gli oggetti binari sono conservati solo come riferimenti nel filesystem
- deve permettere query di ogni tipo (selezione, inserzione, aggiornamento, cancellazione) utilizzando l'SQL o qualcuno di quei linguaggi in via di standardizzazione da parte del W3 (XQuery, XUpdate)
- deve essere installabile facilmente in una cartella che abbia permessi di scrittura e lettura, ed essere implementato in maniera gerarchica nel filesystem
Punti secondari:
- le prestazioni non sono più di tanto importanti
- concetti avanzati dei database possono essere aggiunti in un secondo momento (indicizzazione, clustering, transazioni, rollback...)
Domande:
- quale potrebbe essere la differenza in termini di prestazioni rispetto ad un database tradizionale tipo Access?!
Mi interessano tutti i vostri suggerimenti, aiuti, consigli...
Grazie e ciao!
__________________
«And if you ever smell christian blood up in the mountains, then get your axe and chop them down!»
Progetto interessante.
Penso che l'integrità referenziale sia tuttavia una caratteristica da implementare sin da subito, così come alcune delle proprietà acide.
Access è molto lento. Su un DB di 30 mega e tabelle di un migliaio di record, tende ad impiegare tempi, in locale, pari a 30 secondi o più.
Non oso immaginare cosa potrebbe fare da remoto.
Per migliorare l'efficienza indubbiamente servono meccanismi di cache delle query, quindi fogli xml temporanei.
Certo è che la prospettiva di inserire db in xml in qualsiasi spazio web, senza dover gestire anche un db server, è davvero interessante.
__________________
Attenzio', concentrazio', ritmo e VITALITÀ
Penso infatti che integrità referenziale e indicizzazione siano da inserire subito, in effetti...
Mi interessa una stima delle prestazioni relative all'accesso dei file che conterranno l'xml rispetto al motore di un database lento come Access... e poi, banalmente: ogni tabella deve essere rappresentata da un singolo file aggiornato continuamente, oppure deve essere splittata in un file per ogni record?
La parte concettuale mi sta devastando da un paio di giorni... ![]()
__________________
«And if you ever smell christian blood up in the mountains, then get your axe and chop them down!»
Secondo me ti conviene fare delle prove.
Comunque se gestisci una specie di commit, potresti usare un solo foglio temporaneo con tutte le scritture, e dopo appunto questa commit, aggiornare le tabelle vere e proprie.
__________________
Attenzio', concentrazio', ritmo e VITALITÀ
Allora, mi sto mettendo ora a scrivere... la scelta è ricaduta sul framework .NET che, a parte il livello di conoscenza mia, mi fornisce già tutti gli strumenti che ho bisogno e mi semplificherà di molto il lavoro!
L'idea è quella di creare un provider ereditando dall'interfaccia IDbProvider (quella base di OleDbProvider, OracleProvider, SqlProvider....), di riempire un DataSet con i dati del documento Xml (che dev'essere well-formed) e di manipolarli tramite le proprietà di questo potentissimo oggetto, che tra l'altro mi permette di supportare le transazioni grazie al metodo RejectChanges...
Dopodiché ho intenzione di realizzare quattro parser per supportare l'SQL nella sua forma classica: SELECT, INSERT, UPDATE, DELETE. E qui impazzirò! 
Infine controllerò le prestazioni rispetto ad un database lento come Access (non voglio certo competere con MySql
).
Ora, al lavoro!
__________________
«And if you ever smell christian blood up in the mountains, then get your axe and chop them down!»
Originally posted by AlphaGamma
Secondo me ti conviene fare delle prove.
Comunque se gestisci una specie di commit, potresti usare un solo foglio temporaneo con tutte le scritture, e dopo appunto questa commit, aggiornare le tabelle vere e proprie.

__________________
«And if you ever smell christian blood up in the mountains, then get your axe and chop them down!»
Per chi fosse interessato ad approfondire, qui si trova la lista completa delle interfacce che è necessario implementare per creare un provider di dati completo:
http://msdn.microsoft.com/library/d...lementation.asp
__________________
«And if you ever smell christian blood up in the mountains, then get your axe and chop them down!»
I primi risultati!!!
Ho scritto la classe XmlDbConnection implementando IDbConnection e lasciando in sospeso tutti quei metodi che si occupano di transazioni e comandi Sql. Mi sono occupato solo della lettura del file e del mantenimento dello stato della connessione... poi ho provato la reazione dell'oggetto DataSet su un semplice file Xml (trovato in rete) ben formato:
code:
<?xml version="1.0"?> <impiegati> <impiegato id="M.R"> <nome>Mario Rossi</nome> <email>mrossi@foo.com</email> </impiegato> <impiegato id="F.B"> <nome>Filippo Bianchi</nome> <email>fbaldi@foo.com</email> </impiegato> <impiegato id="A.V"> <nome>Alice Verdi</nome> <email>averdi@foo.com</email> </impiegato> </impiegati>
code:
DataSet: impiegati Table: impiegato - Column: nome - Column: email - Column: id

__________________
«And if you ever smell christian blood up in the mountains, then get your axe and chop them down!»
Non ho capito bene come gestisci oggetti binari (immagino link su filesystem, oppure un foglio xml con dati in mime64?) e relazioni (id numerico?). Caspita cmq progettare da zero un db è complesso, senza dubbio...
__________________
Attenzio', concentrazio', ritmo e VITALITÀ
Originally posted by AlphaGamma
Non ho capito bene come gestisci oggetti binari (immagino link su filesystem, oppure un foglio xml con dati in mime64?) e relazioni (id numerico?). Caspita cmq progettare da zero un db è complesso, senza dubbio...

__________________
«And if you ever smell christian blood up in the mountains, then get your axe and chop them down!»
Sto impazzendoooooooooooooo... ![]()
L'unico modo per fargli riconoscere correttamente l'Xml in ingresso è di formulare uno schema Xsd precedentemente (cosa peraltro intuibile). E anche in questo caso le relazioni tra le tabelle sono curiose...
Ma chi me l'ha fatto fare!? 
__________________
«And if you ever smell christian blood up in the mountains, then get your axe and chop them down!»
L'idea non è male... ma da quello che ho letto qui e da quel poco che so, direi che il tutto richiede un programma su server, oppure funziona da pagine (ASP?) normali?
__________________
?
No, nessun programma su server... è proprio quello il bello dell'Xml!
Basta copiare il tuo database in una cartella con permessi di lettura/scrittura... con Asp.Net poi devi incollare la .dll generata in fase di compilazione nella cartella "bin" e sei pronto per istanziare gli oggetti necessari alla connessione... ![]()
Ieri poi, prima di scappare a bere alla Festa dell'Unità, ho ultimato l'oggetto Command che, in piena tradizione ADO.NET, può eseguire un lettore di dati, delle query di inserzione/aggiornamento/cancellazione e la semplice ricerca di uno scalare. Oggi arriva il difficile: implementare il cursore che legga effettivamente i dati dalle tabelle lette, considerando anche implicite le relazioni tra le tabelle annidate!
__________________
«And if you ever smell christian blood up in the mountains, then get your axe and chop them down!»
Basta copiare il tuo database in una cartella con permessi di lettura/scrittura... con Asp.Net poi devi incollare la .dll generata in fase di compilazione nella cartella "bin" e sei pronto per istanziare gli oggetti necessari alla connessione...
__________________
?
Si, ma non Windows o IIS dipendente, visto che con Mono si può far girare Asp.Net anche su Linux e Apache! ![]()
__________________
«And if you ever smell christian blood up in the mountains, then get your axe and chop them down!»
Già è vero 
E' solo che leggendo mi era venuto in mente un equivalente in PHP, da cui il dubbio sul programma lato server 
__________________
?
Non so sinceramente se esista un equivalente in Php, anzi... se qualcuno mi desse qualche riferimento ne sarei molto contento! 
Intanto scrivere il parser Sql si sta rivelando più divertente del previsto. Per ora riconosce solo l'istruzione SELECT con le clausole basilari, però cresce... ![]()
__________________
«And if you ever smell christian blood up in the mountains, then get your axe and chop them down!»
Le query del tipo SELECT...FROM...WHERE sono completamente riconosciute, domani sarà il giorno decisivo. Prenderò un file Xml già popolato ed utilizzerò l'oggetto Command per eseguire una query. Se il DataAdapter mi restituirà tutti i record coinvolti bene, altrimenti vedrò il da farsi...
__________________
«And if you ever smell christian blood up in the mountains, then get your axe and chop them down!»
Forse mi è sfuggito
ma come controlli e assicuri la concorrenza?
__________________
?
Per ora non è una priorità... verrebbe utilizzato in ambienti ad accesso singolo o con un basso livello di multiutenza...
Ricapitolando:
- l'istruzione Select funziona
- l'istruzione Insert funziona
- l'istruzione Update funziona
- l'istruzione Delete non è ancora stata provata
Prossimo obiettivo:
Join automatico su più tabelle!
__________________
«And if you ever smell christian blood up in the mountains, then get your axe and chop them down!»
Per ora non è una priorità... verrebbe utilizzato in ambienti ad accesso singolo o con un basso livello di multiutenza...
Pensavo fosse per un sito web pubblico__________________
?
Originally posted by yeah
Ah okPensavo fosse per un sito web pubblico
__________________
«And if you ever smell christian blood up in the mountains, then get your axe and chop them down!»
Si, ma l'accesso multiplo non è un problema... è l'aggiornamento dei dati che importa ai fini della concorrenza... o mi sono perso qualcosa?
E' solo che hai detto che hai implementato insert, update e delete, da cui la domanda 
__________________
?
Originally posted by yeah
Assolutamente no (tralasciando le transazioni)E' solo che hai detto che hai implementato insert, update e delete, da cui la domanda
A meno che quelle query vengono fatte in via 'speciale' solo dall'amministratore, il che ne semplifica di molto la gestione.
In questo caso servizi quali forum & co non sarebbero però possibili.
In una parola dipende da cosa (e a quale livello) vuoi ottenere

__________________
«And if you ever smell christian blood up in the mountains, then get your axe and chop them down!»
Io ho fatto un seminario su XQuery e XML DB per il corso di basi 2, se ti interessano... scusa ma ho visto solo ora questo thread.
Cmq qualche riferimento interessante:
http://xquark.objectweb.org/
http://sourceforge.net/projects/exist/
C'è diversa roba in giro sotto GPL.
Roberto
__________________
E lo sceriffo americano non lo sa / ma quando parla ride tutta la città / vile fellone vieni a singolar tenzone / unza unza umpappà troppe truppe mariscià.
Non ci voleva l'eruzione della lava / e due piccioni si contendono la fava / sposa bagnata, bambina svergognata / la questione è delicata / come bolle la patata.
Basta! E' finita la festa
[L'ovile delle vanità, Folkabbestia]
| All times are GMT. The time now is 08:27. | Show all 25 posts from this thread on one page |
Powered by: vBulletin Version 2.3.1
Copyright © Jelsoft Enterprises Limited 2000 - 2002.