DAL / Modello / Domanda di progettazione dell'applicazione per un'applicazione MVC

0

Ho un dispositivo che memorizza i dati di registro binari non elaborati come un BLOB in un DB MySQL. Quel processo è un blackbox per me (fonte chiusa) che non posso cambiare. So, tuttavia, come decodificare quel BLOB e trasformarlo in alcuni dati leggibili dall'uomo. All'interno di tale flusso di dati BLOB vengono archiviate varie informazioni, quali date, messaggi di testo, gravità, errori e così via. Successivamente desidero presentare all'utente la chiamata alla mia applicazione ASP.NET MVC.

Il modo in cui lo sto facendo ora è al volo, il che significa che i dati vengono convertiti in un formato leggibile nel mio livello DAL dell'applicazione ASP.NET ogni volta che i dati vengono richiesti. Il livello DAL a sua volta viene utilizzato dal modello dell'applicazione MVC.

Man mano che il DB dei dati di registro diventa sempre più grande non sono sicuro che questo sia l'approccio giusto per un paio di motivi: Ad esempio, poiché i dati del registro sono binari, tutto l'ordinamento / filtraggio / ecc. Deve essere fatto interrogando TUTTI i record, convertendoli in un formato leggibile dall'uomo ed eseguendo l'ordinamento / filtro / ... sull'input convertito dataset di memoria.

Ho pensato alle alternative e sono giunto alla seguente conclusione:

1.) Eseguire un cron / programmato / qualsiasi lavoro ogni n minuti e convertire i nuovi dati del registro binario in qualcosa di leggibile da umani e memorizzarli nel DB. Dovrei tenere traccia delle righe già convertite, ma è facile. Questo livello intermedio tuttavia non farebbe parte della mia applicazione ASP.NET e come tale dovrebbe essere mantenuto e testato separatamente. Questo non è così importante. Tuttavia, percorrere quella rotta significherebbe che l'utente perderebbe sempre i dati del registro accumulati tra l'ultima esecuzione della trasformazione e ora, nel peggiore dei casi, n minuti. Una possibile soluzione sarebbe quella di eseguire quel cronjob in un programma molto serrato (come ogni 10 secondi circa).

2.) Utilizzare un trigger di inserimento sul DB MySQL che converta immediatamente i dati. Purtroppo, temo di non poter usare SQL / PSM per convertire i dati, quindi avrei bisogno di una UDF personalizzata scritta in C. Sfortunatamente, non sono un programmatore C e mi mancano i fondamenti su come scrivi UDF personalizzate per MySQL.

3.) Mantieni le cose come sono adesso, il che sicuramente degenererà le prestazioni nel tempo, dal momento che non posso usare indici efficienti sui dati BLOB grezzi o eseguire operazioni di filtraggio / ordinamento sul lato DB.

Quindi è lì che mi trovo in questo momento. La domanda è: ci sono altri approcci che ti vengono in mente a cui non ho pensato? Qualcuno ha mai fatto qualcosa di simile, e se sì, quale approccio hai preso?

    
posta lightxx 15.11.2014 - 14:09
fonte

1 risposta

2

La tua prima opzione - scrivere qualcosa per convertirla in normali dati DB - è il modo giusto di andare qui per alcuni motivi. Rende più facile lo sviluppo in quanto hai una chiara demarcazione dei ruoli e puoi ottenere un'app di elaborazione dati funzionante da un lato e testare il front-end sui dati di test dall'altro.

Questo codice può essere in C # e può anche essere nella stessa soluzione dell'app Web in modo da poter lavorare su di loro in concerto, se necessario. Potrebbero persino condividere qualche codice a livello di libreria, se necessario, aprendo le cose fino ad avere qualche decodifica live nell'app Web.

    
risposta data 15.11.2014 - 23:18
fonte

Leggi altre domande sui tag