Persistenza delle categorie

Per ciò che riguarda la gestione della persistenza delle categorie di documenti ham e spam utilizzati per addestrare il sistema, si era deciso in primo luogo di serializzare su file gli oggetti software che le rappresentano. Per questo motivo la classe del modello PersistentCategory non fa altro che tenere le informazioni essenziali della classe EmailCategory (che è quella effettivamente utilizzata dall'applicazione nello svolgere i compiti della logica applicativa): essa veniva quindi serializzata su file attraverso la libreria pickle del linguaggio Python.

C'è da dire che le due classi software non comunicavano direttamente fra di loro, ma in mezzo risiedeva la classe PersistencyHandler, che si occupa, a partire da una EmailCategory, di istanziare a partire da essa una PersistentCategory e infine serializzarla su file. La classe PersistencyHandler svolgeva anche il compito opposto: deserializza da file una PersistentCategory e costruiva a partire da essa una EmailCategory, che veniva poi utilizzata dall'applicazione.

Entrando nel dettaglio, le due categorie serializzate venivano salvate nei file hamcategory e spamcategory all' interno della cartella personale contenente la configurazione di SpamGAME per l'utente. Tutto ciò per l' utilizzatore dell' applicazione è comunque assolutamente trasparente.

La motivazione di conservare questi dati di fondamentale utilizzo e quanto più rapido accesso sul file system attraverso la libreria pickle di Python era stata dettata soprattutto dalla rapidità di sviluppo che tale strategia consentiva, e soprattutto perchè l' utilizzo di una base di dati (e quindi di un DBMS) per conservare in modo persistente i dati non sarebbe strettamente necessario perchè:

In fase successiva è avvenuto un cambio di strategia: invece che serializzare su file in formato pickle, si è scelto di utilizzare una base di dati. In particolare è stato usato un embedded db (Berkeley DB [41]), che ha presentato i seguenti vantaggi:

Nel concreto la serializzazione viene effettuata sempre dalla classe software PersistencyHandler, che si occupa di scrivere (leggere) sulle (dalle) due basi di dati ham.db e spam.db di cui ciascun utente dell' applicazione dispone. Anche in questo caso la gestione della persistenza è assolutamente trasparente per l' utente.

Alessio Pace 2004-03-26