On 03/07/2011 11:42 AM, Claudio wrote: > Il 07 marzo 2011 11:38, Clauz <cl...@ninux.org> ha scritto: >> Pensandoci: se usassimo un database testuale potremmo anche usare git (o >> mercurial) come backend... > > esplicita meglio la tua idea, come faresti? dettagli architetturali plz
Innanzitutto si potrebbero (o anche no) implementare gli utenti, con differenti permessi: tutti possono vedere la history, magari con diff tra revisioni, ma solo gli admin possono fare i revert. Ho in mente una cosa tipo questa: http://battlemesh.org/BattleMeshV4?action=info Con git: Sotto vengono fatte chiamate a git (diff, log, etc) parsate e presentate agli utenti. Drawback: per fare questa cosa serve un database dei nodi su file testuale, rinunciando a mysql o postgres. Senza git: C'e' un modo nativo di 'versionare' la tabella di un database? So che postgresql di fatto sotto tiene traccia delle versioni [0] (e, scopro ora da wikipedia, anche mysql!) ma non credo che siano accessibili all'utente del database... Se no si fa una nuova tabella con la lista di operazioni effettuate sulla mappa: operations (timestamp, node_id, user, op_type, op_params) - timestamp e user sono momento e utente (o indirizzo IP) che effettua l'operazione - node_id e' l'id del nodo coinvolto nell'operazione - op_type puo' essere: insert, delete, edit_type, edit_location, edit_ip - op_params e' un campo il cui significato varia a seconda del tipo di operazione (hai presente assembler? :)) per cui, nel caso di: - 'insert' dentro op_params ci va null (tutti i dati del nodo stanno nella tabella dei nodi) - 'delete' dentro op_params ci va null, ma bisogna fare in modo che il nodo non venga effettivamente cancellato dalla tabella dei nodi ma solo marcato come cancellato (impostando il tipo di nodo a -1 per esempio) - 'edit_type' dentro op_params ci vanno il tipo di nodo vecchio ed il tipo di nodo nuovo, separati da punto e virgola - 'edit_location' dentro op_params ci va: old_lat,old_lng,old_alt; new_lat,new_lng,new_alt (si capisce?) - 'edit_ip' dentro op_params ci mettiamo: ip_vecchio; ip_nuovo Clauz P.S. in realta' i database relazionali, soprattutto in ambito web, sanno un po' di vecchio se confrontati con roba come couchdb [1], ma la curva di apprendimento e' piuttosto ripida... [0] https://secure.wikimedia.org/wikipedia/en/wiki/Multiversion_concurrency_control [1] http://couchdb.apache.org
signature.asc
Description: OpenPGP digital signature
_______________________________________________ Wireless mailing list Wireless@ml.ninux.org http://ml.ninux.org/mailman/listinfo/wireless