|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
[progettazione DB] memorizzazione telegrammi
Carissimi
ho un altro quesito da sottoporre ai piu' esperti di database. Ho un sistema di produzione, il quale spedisce periodicamente via socket dei TELEGRAMMI (i.e. un pacchetto di dati - una struttura C, per semplificare - con un'intestazione che la identifica). Questi telegrammi devono essere memorizzati in un database per verifica della produzione. Il problema e' che questi telegrammi possono essere modificati, anche frequentemente, e vorrei trovare la maniera di NON modificare il database a seguito della modifica del telegramma. - potrei, per esempio, inserire il telegramma in un record, il quale contiene gli identificativi ed un BLOB per contenere tutti i dati. Ovviamente il db non cambierebbe se il telegramma cambia. Purtroppo i dati che ottengo dal db non sono immediatamente leggibili; - potrei creare una tabella dove memorizzo le single parti del telegramma. Per esempio, gli interi in una tabella, i float in un'altra e cosi' via. Naturalmente memorizzerei il dato con l'id del telegramma, l'id del campo corrispondente ed un progressivo. Anche in questo caso non modificherei il database e potrei vedere il telegramma per mezzo di una view che rimetta i dati al loro posto. Pero' questo sistema potrebbe funzionare nel caso avessi pochi dati, visto l'enorme overhead che i costringe ad avere. Altro? Qualcuno ha un'idea migliore?
__________________
In God we trust; all others bring data |
|
|
|
|
|
#2 | ||
|
Senior Member
Iscritto dal: Jun 2010
Città: Varese
Messaggi: 996
|
Quote:
Quote:
Un diagramma E-R ti aiuterebbe parecchio nella progettazione concettuale del tuo DB; unica domanda, perché non sono IMMEDIATAMENTE leggibili? (è un parametro che mi sfugge |
||
|
|
|
|
|
#3 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Grazie per la risposta
Quote:
Questo ovviamente non e' possibile se memorizzo in un blob: devo estrarre i dati, decodificarli,.... ed ovviamente non posso fare query sui valori di questi campi.
__________________
In God we trust; all others bring data |
|
|
|
|
|
|
#4 | |
|
Senior Member
Iscritto dal: Jun 2010
Città: Varese
Messaggi: 996
|
Quote:
Quindi è un tuo problema 'immediatamente leggibile'. BLOB indica un campo binario, non so che DBMS usi ma penso che con una Stored qualsiasi puoi tornarti fuori i dati testuali da visualizzare; in alternativa potresti crearti una base di dati sotto che contiene tutti i dati del telegramma e una vista per stampare SOLo quelli che ti interessano. I privilegi di autorizzazione è la forma più sicura per evitare l update/delete della tabella |
|
|
|
|
|
|
#5 | |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
Inoltre, più o meno qual è l'ordine di grandezza trattato. Oltre a quello che ha detto dojolab, considera che tanti engine SQL permettono di trattare un BLOB in maniera similare a un campo di testo, quindi puoi visualizzarne i dati contenuti e magari farci qualche operazione di ricerca.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
|
#6 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
Per migliorare la produzione, ogni stazione periodicamente acquista nuovi sensori o migliora quelli che ha. Pertanto, periodicamente decide di cambiare i telegrammi aggiungendo/togliendo campi. La quantita' di dati che mi arrivano non e' tale da impensierire alcun computer. Volevo pero' pensare (RIpensare) ad una architettura che fosse la piu' flessibile e meno sensibile ai cambiamenti.
__________________
In God we trust; all others bring data |
|
|
|
|
|
|
#7 | |
|
Senior Member
Iscritto dal: Jun 2010
Città: Varese
Messaggi: 996
|
Quote:
|
|
|
|
|
|
|
#8 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
Ora nel sistema vengono scambiati circa 500 diversi tipi di telegrammi. Alcuni sono in uscita: li invio io alle stazioni dell'impianto per i vari set-point, schedule, ... Questi in generale sono inviati prima che la stazione operi su un prodotto (sto semplificando molto, a dire il vero, ma non penso che i dettagli siano importanti). Durante la lavorazione (o a lavorazione ultimata, a seconda dei casi) ottengo le misurazioni ed i vari responsi. Ogni prodotto ha un nome (i.e. un id), quindi posso capire se il prodotto e' stato conforme alle specifiche che ho spedito, preparare report e cosi' via. Ovviamente posso mettere tutti questi telegrammi nei blob e preservarmi da modifiche in caso che i telegrammi cambino. Pero' e' chiaro che ho svantaggi quali, ad esempio, l'impossibilita' di estrazione dei telegrammi che appartengono ad un singolo prodotto o processo di lavorazione, .... Insomma, non posso fare tutte le query che potrei immaginare nel caso decidessi, per esempio, di creare le 500 tabelle (una per ogni telegramma) e associassi ad ogni colonna il corrispondente field del telegramma. Mi piacerebbe avere i vantaggi dell'uno e dell'altro sistema, ma non ho nemmeno capito se e' davvero possibile
__________________
In God we trust; all others bring data |
|
|
|
|
|
|
#9 | |
|
Senior Member
Iscritto dal: Jun 2010
Città: Varese
Messaggi: 996
|
Quote:
I telegrammi li salvi in una tabella telegrammi associando ad ogni telegramma il relativo sensore che legge il dato cosi sai esattamente quali campi aspettarti in fase di 'stampa' del telegramma. Ricapitolando avresti 3 tabelle - sensori (id, nome, e quel che vuoi) - specifiche_sensori (id, sensore, specifica, valore di default se previsto) - telegramma (id, codice, nome, sensore associato) |
|
|
|
|
|
|
#10 | |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Quote:
A lavoro in questi casi utilizziamo MongoDB: http://www.mongodb.org/
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
|
#11 | |
|
Senior Member
Iscritto dal: Jun 2010
Città: Varese
Messaggi: 996
|
Quote:
Me lo guardo pure io |
|
|
|
|
|
|
#12 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
In effetti ero arrivato a fare una valutazione simile e stavo cominciando a valutare Cassandra. Ma immagino che tu abbia un'idea piu' precisa della mia riguardo NoSQL, per cui seguiro' il tuo consiglio e guardero' prima MongoDB. E poi il nome mi piace... ho avuto una fidanzata mongola (prima di sposare una cinese)
__________________
In God we trust; all others bring data |
|
|
|
|
|
|
#13 | |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Quote:
Ultima domanda: sai qualcosa delle prestazioni? E' *ragionevolmente* veloce? Puo' gestire un *discreto* numero di record? (ragionevolmente e discreto, diciamo in comparazione con un db tradizionale quale Oracle o MySql)
__________________
In God we trust; all others bring data |
|
|
|
|
|
|
#14 |
|
Senior Member
Iscritto dal: Jan 2002
Città: Germania
Messaggi: 26110
|
Scusami se ti rispondo adesso, ma sono reduce dal christmas party aziendale.
![]() Per loro natura i database non relazionali sono generalmente molto più veloci di quelli relazionali. E' chiaro che la velocità si paga: non ci sono stored procedure e integrità referenziale, ad esempio. Inoltre, per quelli che implementano transazioni ACID (non tutti lo permettono) in genere la "transazione" riguarda un preciso dato/record e non un loro insieme. Personalmente tendo a preferire i db relazionali quando posso, perché tendo a utilizzare tutto ciò che di buono offrono (ecco perché farei volentieri a meno di MySQL, ma purtroppo a lavoro abbiamo questo e me lo debbo sorbire Preferenze a parte, quando per un dato problema gli svantaggi nell'uso di un db relazionale sono troppi, passo a valutare quelli non relazionali. Ti ho indicato MongoDB, perché lo usiamo a lavoro e quindi lo conosco, ma fra quelli non relazionali di cui ho valutato le caratteristiche lo trovo fra i più comodi perché: - offre un'ottima scalabilità; - ha una console javascript (OK, mi fa schifo come linguaggio, ma meglio che niente); - supporta ACID per le operazioni atomiche (su singoli dati/record); - supporta la replicazione (e a breve anche in clustering; anzi, non so se l'abbiano già implementato, visto che è da un pezzo che non controllo il sito); - memorizza i dati in formato JSON binario (BSON), per cui utilizza JSON come formato di import/export, che è decisamente leggibile. Poiché avevi intenzione di eseguire delle query e, quindi, avere a che fare con dati leggibili, penso calzi a pennello per i tuoi problemi. Tra l'altro ha binding per diversi linguaggi, fra cui ovviamente Python (anche se ho realizzato un wrapper per realizzare qualcosa di più carino ).x dojolab: occhio che per l'e-commerce non lo userei. Come non userei MySQL con MyISAM.
__________________
Per iniziare a programmare c'è solo Python con questo o quest'altro (più avanzato) libro @LinkedIn Non parlo in alcun modo a nome dell'azienda per la quale lavoro Ho poco tempo per frequentare il forum; eventualmente, contattatemi in PVT o nel mio sito. Fanboys |
|
|
|
|
|
#15 |
|
Senior Member
Iscritto dal: Nov 2005
Città: Texas
Messaggi: 1722
|
Scusa il ritardo, sono reduce da un viaggio in Italia
Grazie mille per le informazioni, sono state preziosissime. Ho visto che c'e' qualche problema a trovare il driver C++ per Windows, ci devo lavorare un po'. Sembra davvero quello che cercavo
__________________
In God we trust; all others bring data |
|
|
|
|
|
#16 | |
|
Senior Member
Iscritto dal: Jun 2010
Città: Varese
Messaggi: 996
|
Quote:
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 20:01.













).








