query su MUMPS da asp.net/C#

Qualcuno sa come eseguire una query dal database MUMPS utilizzando C # senza utilizzare KBSQL -ODBC?

Abbiamo bisogno di interrogare dal database MUMPS (Mckesson STAR Patient care) e quando usiamo KBSQL è limitato a 6 utenti simultanei. Quindi stiamo provando a interrogare MUMPS direttamente senza usare KBSQL.

Mi aspetto qualcosa come LINQ TO MUMPS.

Penso che Mckesson usi Cache di Intersystems come suo fornitore di parotite (M). La cache ha il supporto per .Net (vedi la documentazione qui ). Jesse Liberty ha un buon articolo sull’uso di C #, .Net e Windows Form come front-end di un database Cache.

Non sono sicuro di LINQ (non sono esperto qui), ma questo potrebbe darti un’idea su dove iniziare a fare il tuo progetto.

Michael

Prima di tutto, anch’io sento il tuo dolore. Ho avuto la sfortunata esperienza di sviluppo in MagicFS / Focus un paio di anni fa, e abbiamo avuto la stessa identica richiesta di supporto per le query relazionali. Perché le persone vogliono sempre ciò che non possono avere?

Ad ogni modo, se la versione di MUMPS che stai usando è qualcosa come MagicFS / Focus e hai accesso al file system che contiene il “database” (file flat), allora una ansible via è:

  1. Esportare i file flat in file XML. Per fare ciò, dovrai emettere manualmente l’XML dai file flat usando MUMPS o la tua lingua preferita. Per quanto doloroso possa sembrare, MUMPS potrebbe essere la strada da percorrere poiché potresti non voler determinare manualmente il record corrente.

  2. Leggi nell’XML usando LINQ in XML

  3. Esegui query LINQ.

Certo, il primo passo è più facile a dirsi che a farsi, e potrebbe anche essere più difficile se stai cercando di creare i file XML al volo. Una variante a questo sarebbe gestire la generazione dei file XML come gli indici, tramite un processo server notturno o simili.

Se hai intenzione di eseguire query in modi specifici (ad esempio, desidero unire le tabelle Foo e Bar sull’ID e questo è tutto ciò che desidero), prenderei in considerazione l’estrazione e la memorizzazione nella cache di tali dati in raccolte C # lato server e ignorare le query del tutto (o trascina quelli che usano WCF o simili e poi esegui le query LINQ).

È ansible evitare la limitazione di 6 utenti separando la connessione al database dalle istanze dell’applicazione

Utilizzare l’ODBC KB / SQL attraverso un livello intermedio (un DAL nell’applicazione) o un servizio separato (servizio Windows).

Questo componente può comunicare con il database MUMPS utilizzando al massimo 6 thread separati (in linea con la limitazione KB / SQL).

Il componente può utilizzare ADO.NET per ODBC per comunicare con il driver ODBC KBSQL. È quindi ansible consumare i dati dall’applicazione utilizzando LINQ per ADO.NET.

Potrebbe essere necessario utilizzare un sistema di accodamento come MSMQ per gestire l’accodamento delle richieste di dati. se le 6 connessioni simultanee sono insufficienti per il volume delle richieste. È buona norma progettare per accodare le richieste e utilizzare le chiamate asincrone LINQ per evitare il blocco dell’interazione dell’utente.

Tutte le attuali implementazioni linguistiche di MUMPS hanno la capacità di specificare i programmi MUMPS che rispondono a una connessione TCP / IP. Il database nativo di MUMPS è strutturato come una gerarchia di coppie multi-chiave e valore ordinate, essenzialmente un superset del paradigma NoSQL.

KB / SQL è un gruppo di programmi che rispondono alle query SQL / ODBC, li traducono in queste query di dati “globali” di MUMPS, recuperano e consolidano i risultati da MUMPS e quindi restituiscono i dati nel modulo che il protocollo SQL / ODBC si aspetta.

Se si dispone delle autorizzazioni / dell’authorization di sicurezza per l’implementazione che consente di creare ed eseguire programmi MUMPS (chiamati “routine”), è ansible rispondere a qualsiasi protocollo desiderato da tali programmi. I sistemi MUMPS possono produrre risultati di testo o binari su una porta TCP / IP o su un file del sistema operativo host. Molti fornitori ti impediscono esplicitamente di fare questo nei loro contratti per fornire assistenza sanitaria e soluzioni finanziarie.

Per quanto ne so, la syntax LINQ è un prodotto Microsoft proprietario, anche se ci sono certamente sforzi Open Source simili a LINQ. Non ho visto alcuna definizione formale di un protocollo di linea per LINQ, ma se ce n’è uno, una routine di MUMPS può essere scritta per comunicare usando quel protocollo. Dovrebbe tuttavia fare qualcosa di simile a KB / SQL, poiché né la syntax LINQ né la syntax SQL sono molto vicine alla syntax nativa di MUMPS.

Il meccanismo di strutturazione e archiviazione dei dati di MUMPS può essere tradotto meccanicamente in una syntax XML. Ciò potrebbe richiedere ancora un grosso sforzo in quanto è altamente improbabile che il fornitore del tuo sistema fornisca un DTD definito per questa syntax XML creata meccanicamente, e dovrai comunque trattare con valori e riferimenti codificati che sono memorizzati nel sistema basato su MUMPS nella loro forma grezza.

Quale fornitore e versione di MUMPS stai usando? La soluzione dipenderà indubbiamente dalle API del venditore che hanno esposto.