Domanda

Ho un'applicazione C # che permette all'utente di inserire informazioni sui clienti e luoghi di lavoro. L'informazione è molto semplice.

  • Cliente: Nome, numero, indirizzo, e-mail, sito associato di lavoro
  • .
  • Il sito di lavoro:. Nome, posizione

Ecco le mie specifiche ho bisogno per questo programma.

  • Nessun limite sulla quantità di dati inseriti.
  • per utente singolo per applicazione. Nessuna attività concomitante o più utenti.
  • Consentire voci utente / dati da esportare in un file esterno che può essere facilmente condivisi tra le applicazioni / utenti.
  • Permette di query degli utenti per i clienti del display in base alle diverse combinazioni di informazioni sui clienti / lavoro le informazioni sul sito.
  • I dati non potrà mai essere visualizzato o manipolato al di fuori dell'applicazione.
  • Il programma sarà in esecuzione quasi sempre, ridotto a icona sulla barra delle applicazioni.
  • Il tempo di avvio non è molto importante, tuttavia vorrei le query ad essere notevolmente veloce.

Il tutto sembra puntare verso un database di me, ma molto leggero. Tuttavia ho anche bisogno di non avere limitazioni per quanto riguarda l'archiviazione dei dati. Se siete d'accordo dovrei usare un database, per favore fatemelo sapere che cosa sarebbe più adatto per le mie esigenze. Se non pensi che dovrei utilizzare un database, si prega di fare alcuni altri suggerimenti su ciò che si pensa possa essere migliore.

È stato utile?

Soluzione

Sembra a me come un database è al 100% quello che ti serve. Offre sia la memorizzazione dei dati, il recupero dei dati (comprese le query) e la possibilità di esportare i dati in un formato standard (sia direttamente dal database, o tramite l'applicazione.)

Per un database leggero, vi suggerisco SQLite (si pronuncia 'SQL Lite';)). È possibile google per tutorial su come configurarlo, e poi come interfacciarsi con esso tramite il vostro codice C #. Ho anche trovato un riferimento a questo C # wrapper per SQLite, che può essere in grado di fare gran parte del lavoro per voi!

Altri suggerimenti

Il mio suggerimento sarebbe quello di utilizzare SQLite. Lo si può trovare qui: http://sqlite.org/ . E si può trovare la versione C # involucro qui: http://sqlite.phxsoftware.com/

SQLite è molto leggero e ha un po 'di roba forte abbastanza per un motore ad esempio leggero. Un'altra opzione è possibile esaminare è Microsoft Access.

Si sta chiedendo ancora una volta la domanda sbagliata:)

La domanda migliore è "come faccio a costruire un programma che mi permette di cambiare l'implementazione di archiviazione dati?"

Se si applica il modello repository e correttamente l'interfaccia che si può costruire strati di persistenza intercambiabili. Così si potrebbe iniziare con un'implementazione e cambiarlo quando necessario wihtout necessità di riprogettare gli strati di business o di applicazione.


Una volta che hai un'interfaccia repository si potrebbe provare le implementazioni in un sacco di approcci differnt:

file flat - Si potrebbe persistere i dati come XML, ed a condizione che non è un sacco di dati è possibile memorizzare l'intero contenuto in memoria (basta leggere il file in fase di avvio, scrivere il file allo spegnimento). Con XML in memoria si può ottenere molto elevato throughput senza preoccupazione per gli indici di database, ecc.

distribuibile DB - SQLite o SQL Compact grande opera; Essi offrono molti vantaggi DB, e non richiedono l'installazione

Local DB - SQL Express è un buon mezzo tra un peso leggero e ricco di funzionalità DB. L'accesso, se usato con attenzione, può bastare. Il vantaggio principale è che è incluso con MS Office (anche se non installato di default), e alcuni gruppi IT sono più comodo avere accesso installato su macchine di SQL Express.

completa DB - MySql, SQL Server, PostgreSQL, et al.


Dato vostre specifiche esigenze vi consiglio verso un file flat basato su XML - con l'unica condizione è che tu sei OK con la memoria-utilizzo dell'applicazione direttamente correlarli con la dimensione del file (dal momento che i dati sono al testo, anche con il peso di XML, ciò avrebbe richiesto un molto di voci a diventare molto grande).

Ecco i pro / contro - elencati per le vostre esigenze:

Contro

  • Nessun limite sulla quantità di dati immessi.
    • utilizzando XML in memoria significherebbe l'applicazione non sarebbe in scala. Si potrebbe facilmente gestire un file di dati 10MB, 100MB non dovrebbe essere un problema (a meno che il sistema ha poca memoria RAM), al di sopra che si deve seriamente domanda "posso permettermi questa quantità di memoria?".

Pro

  • per utente singolo per applicazione. Nessuna attività concomitante o più utenti.
    • XML può essere letto in memoria e tenuto dal processo (AppDomain, in realtà). E 'perfettamente adatto per gli scenari utente singolo in cui la concorrenza è molto stretta preoccupazione.
  • Consenti voci utente / dati da esportare in un file esterno che può essere facilmente condivisi tra le applicazioni / utenti.
    • XML è perfetto per l'esportazione, e anche facile da importare in Excel, database, ecc ...
  • Consente di query degli utenti ai clienti di visualizzazione basati su diverse combinazioni di informazioni sul sito informazioni sui clienti / lavoro.
    • LINQ-to-XML è tuo amico: D
  • I dati non potrà mai essere visualizzato o manipolato al di fuori dell'applicazione.
    • .... poi tenendolo interamente in memoria non causa problemi
  • Il programma sarà in esecuzione quasi sempre, ridotto a icona nella barra delle applicazioni.
    • in modo da caricare il XML in fase di avvio, e la scrittura allo spegnimento sarà dimensioni adeguate (se il file è molto grande che potrebbe richiedere un po ')
  • Il tempo di avvio non è molto importante, tuttavia vorrei le query ad essere notevolmente veloce
    • Lettura del XML sarebbe relativamente lento in fase di avvio; ma quando è caricato in memoria sarà difficile da battere. Qualsiasi data DB richiederà che essere avviato il motore DB, che le chiamate di interoperabilità / cross-process / cross-network essere fatti, che i risultati essere caricati da disco (se non in cache dal motore), ecc ...

Come su SQLite? Sembra che è una buona misura per la vostra applicazione.

È possibile utilizzare System.Data.SQLite come il .NET wrapper.

È possibile ottenere SQL Server Express gratuitamente. Direi che la questione non è tanto perché si dovrebbe utilizzare un database, di più perché non dovresti? Questo tipo di problema è esattamente ciò che i database sono per, e SQL Server è un database molto potente e ampiamente utilizzato, quindi se avete intenzione di andare per qualche altra soluzione si necessità di fornire una buona ragione per cui si non sarebbe andato con un database.

Un database sarebbe una buona forma. SQLite è buono come altri hanno già detto.

Si potrebbe anche utilizzare un'istanza locale di SQL Server Express per trarre vantaggio di una migliore integrazione con altri pezzi dello stack di sviluppo Microsoft (dal momento che si parla C #).

Una terza opzione è un database di documenti come Raven che può andare bene dai suoni dei dati.

modifica
Una quarta opzione sarebbe quella di provare a Lightswitch quando la beta esce in pochi giorni. (8-23-2010)
/ modifica
C'è sempre sarà una limitazione di memorizzazione dati (lo spazio vuoto del disco rigido). Secondo Wikipedia, SQL Express è limitata a 10 GB per SQL Server Express 2008 R2

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