Newsgroup: it.comp.os.linux.development
Titolo: Piccolo, ma veramente piccolo, database

Spiego il mio problema.
Devo scrivere una applicazione che, interfacciandosi con apposito hw, legge lo 
stato di alcuni parametri e li memorizza (anche in modo non volatile, quindi in 
RAM) su un piccolo database. Quando intendo piccolo, dico veramente piccolo e 
parco di risorse.
Un'*altra* applicazione deve soltanto leggere il valore di questi parametri per 
mostrarli a schermo.
Poi dovrei scrivere delle pagine Web con degli script CGI che mi permettano di 
visualizzare i soliti parametri. Anche questi script (non so ancora come 
scriverli) dovranno accedere a questo database in lettura.
I parametri sono dell'ordine del centinaio e hanno una dimensione relativamente 
ridotta. In genere sono bit o byte. Qualcuno è intero a 16 bit, qualcun altro a 
32 bit (ma è già molto raro). Infine c'è qualche struttura dati (array di n byte 
con n<32) che devo gestire in modo "trasparente".
Diciamo che il database sarà formato da una lista di parametri di tipo variabile 
che è possibile leggere/scrivere da altre applicazioni.
I database mySQL e PostgreSQL mi sembrano esagerati per questa applicazione e 
comunque occuperebbero troppe risorse per quelle che ho a disposizione.
Così pensavo se esistessa qualche piccola libreria/software che mi rendesse il 
compito molto semplice, soprattutto la creazione dell'interfaccia tra il 
database e le applicazioni (quella che scrive e quelle che leggono le variabili).
In alternativa, potrei scrivere io direttamente qualcosa in C se mi indirizzate 
verso un sistema o algoritmo che possa fare al caso mio.


SqlLite dovrebbe fare al caso tuo...Il db è il file stesso, quindi è
estremamente "comodo"; è SQL compliant, e dispone di wrapper per tutti
i linguaggi più comuni (C, C++, Python, Perl...)

 i linguaggi più comuni (C, C++, Python, Perl...)
In effetti, nelle varie ricerche, mi ero imbattuto in questo DBMS. Ho visto che 
esiste addirittura la "distribuzione" amalgamation, cioè il core del DBMS in un 
*unico* file .C (ovviamente bello grande).
Basta aggiungerlo ai sorgenti della mia applicazione ed è fatto.
Però mi chiedevo se anche questo non fosse sovrabbondante per me. A me non 
interessa l'SQL, tanto l'interfaccia tra il database e le applicazioni è interna 
  e può essere proprietaria. Alla fine quello che mi interessa è:
   - definire una lista di variabili (ID e tipo)
   - scrivere la variabile id con il valore x
   - leggere la variabile id
Addirittura non mi serve che queste variabili siano scritte in un file, tanto 
vengono lette ogni volta all'accensione dal sistema hw collegato e rinfrescate 
continuamente. Anzi, forse è meglio che stiano proprio in RAM.
Forse esiste qualche libreria C striminzita che già fa qualcosa del genere senza 
scomodare SQL.

 scriverli) dovranno accedere a questo database in lettura.
Occhio al locking, leggi bene la documentazione ;)
Luca
-- 
Carpe diem, quam minimum credula postero. (Q. Horatius Flaccus)

 dico veramente piccolo e parco di risorse.
Fatti un blocco di memoria condivisa, poi te lo mappi nei due processi
via una stuttura. Facile e veloce.
man 2 shmget
Ciao,
-- 
        Roberto Divia`              Love at first sight is one of the greatest
Dep:PH Bat:53 Mailbox:C02110      labour-saving devices the world has ever seen
Route de Meyrin 385               ---------------------------------------------
Case Postale                                Phone:  
+41-22-767-4994
CH-1211 Geneve 23 CERN                      Fax:    
+41-22-767-9585
Switzerland                                 E-Mail: 
Robert...@cern.ch

 parametri per mostrarli a schermo.
Per una cosa così semplice usare un db potrebbe persino essere troppo,
magari ti basta un file xml (da scrivere tramite le librerie apposite
già pronte) che ruoti ogni tanto.


Mi dici di quali librerie parli? In che senso che ruoti ogni tanto?

 Mi dici di quali librerie parli? In che senso che ruoti ogni tanto?
Per ogni linguaggio di programmazione immaginabile esistono una o più
librerie per leggere/scrivere file xml, trovi tutte le info che vuoi su
google, una volta che hai deciso il linguaggio.
Per "ruotare" intendevo che se dopo un tot ti accorgi che il file sta
diventando molto grosso puoi rinominarlo e sostituirlo con uno nuovo,
come fa logrotate con i file di log.

 e quelle che leggono le variabili).
SQLite dovrebbe fare ciò che cerchi.
Ciao, Micky
-- 
What's this hash prompt on my terminal mean?
Micky Del Favero  -  System Manager  &  BOFH

 già pronte) che ruoti ogni tanto.
A questo punto puo` anche utilizzare un semplice file di testo
formattato in una determinata forma, in modo che nemmeno deve scomodare
XML per fare 'sta cosa
Enrico

 genere senza scomodare SQL.
Librerie gia' esistenti non so se esistono, ma puoi farti tu una bella 
mappa di strutture e morta li'. In C++ postresti fare una mappa di 
std::map<std::string,boost::any> mentre in C, per essere risparmiosi e 
non frammentare inutilmente la memoria, un array del tipo
struct _tupla {
  char key[MAX_KEY_LEN];
  unsigned char value_type; // bit, byte, short, int, array, etc etc
  unsigned char data[MAX_DATA_LEN];	// la memoria che contiene il 
massimo dato
};
e usare la scelta della memoria condivisa, e se proprio vuoi prestazioni 
piu' elevate nella ricerca della chiave usa un insertion sort (o un 
quick/bubble sort) e una ricerca binaria della chiave.
:)