Domanda

Sto usando SqlServer per guidare un'applicazione WPF, attualmente sto usando NHibernate e ho pre-letto tutti i dati in modo che vengano memorizzati nella cache per motivi di prestazioni. Funziona con una singola app client, ma mi chiedevo se ci fosse un database in memoria che potessi usare in modo da poter condividere le informazioni tra più app sullo stesso computer. Idealmente, questo si collocherebbe sotto il mio stack NHibernate, quindi il mio codice non dovrebbe cambiare. In effetti sto cercando di spostare il mio DB dal suo formato tradizionale sul server per essere un DB in memoria sul client.

Nota Ho solo bisogno di selezionare funzionalità.

È stato utile?

Soluzione

http://www.db4o.com/ può essere tuo amico!

Altri suggerimenti

Sarei incredibilmente sorpreso se avessi persino bisogno di caricare tutte le tue informazioni in memoria. Lo dico perché, ad esempio, sto lavorando su un'app Web che al momento (per vari motivi) carica migliaia di record su molte pagine. Questo è PHP + MySQL. E anche così può farlo e renderizzare una pagina in meno di 100 ms.

Prima di percorrere questa strada assicurati di doverlo fare. Prima di tutto rendi il tuo database il più performante possibile. Ora ovviamente questo include cose come avere indici adeguati e ottimizzare il tuo database ma anche se stanno mettendo il cavallo davanti al carrello.

Innanzitutto è necessario assicurarsi di disporre di un buon modello di dati relazionali: uno che si presta a query performanti. Questa è tanta arte quanto è scienza.

Inoltre, potrebbe piacerti NHibernate ma Gli ORM non sono sempre i migliori scelta . Ci sono alcuni casi angolari, ad esempio, in cui SQL codificato a mano sarà enormemente superiore.

Ora supponendo che tu abbia un buon modello di dati e supponendo che tu abbia quindi ottimizzato i tuoi indici e i parametri del database e poi hai correttamente configurato NHibernate, quindi e solo allora dovresti considerare di archiviare i dati in memoria se e solo se il rendimento è ancora un problema .

Per metterlo in prospettiva, le uniche volte in cui ho dovuto farlo sono su sistemi che devono eseguire milioni di transazioni al giorno.

Un motivo per evitare la memorizzazione nella memoria cache è perché aggiunge molta complessità. Devi affrontare problemi come la scadenza della cache, aggiornamenti indipendenti per l'archivio dati sottostante, sia che utilizzi aggiornamenti sincroni o asincroni, come fornire al cliente una visione coerente (se non aggiornata) dei tuoi dati, come gestisci con failover e replica e così via. C'è un enorme costo di complessità da pagare.

Supponendo che abbiate fatto tutto quanto sopra e ne abbiate ancora bisogno, mi sembra che ciò di cui avete bisogno sia una soluzione cache o grid. Ecco un panoramica delle soluzioni di griglia / cluster Java ma molte di esse (ad es. Coherence, memcached) si applicano anche a .Net. Un'altra scelta per .Net è Velocity .

È necessario sottolineare e sottolineare che qualcosa come NHibernate è coerente solo se nulla aggiorna esternamente il database e che esiste esattamente un processo abilitato per NHibernate (salvo le soluzioni cluster). Se due app desktop su due PC diversi stanno entrambi aggiornando lo stesso database con NHibernate, la memorizzazione nella cache semplicemente non funzionerà perché le unità di persistenza semplicemente non saranno consapevoli delle modifiche apportate dall'altro.

Velocity è un server di cache oggetti fuori processo progettato da Microsoft per fare praticamente ciò che desideri anche se al momento è solo in formato CTP.

Credo che ci siano anche wrapper per memcached, che possono anche essere usati per memorizzare oggetti nella cache.

Puoi usare HANA, Express Edition. Puoi scaricarlo gratuitamente , è in memoria, colonnare e consente ulteriori capacità di analisi come analisi del testo, geospaziale o predittiva. Puoi anche accedere con ODBC, JDBC, libreria hdb node.js, API REST tra gli altri.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top