Domanda

Io lavoro con Apache, PHP e MySQL per lo sviluppo web e applicazioni locali. Da un paio di anni ho lentamente imparato C ++ e voglio costruire un'applicazione di questa estate. In particolare, voglio fare una domanda di "biblioteca" in cui è possibile memorizzare le informazioni sui libri, CD, e le registrazioni che possiedo. So che questo tipo di applicazione esiste, ma voglio imparare il C ++ e questo mi sembra un buon modo per andare su di esso.

Qui ci sono alcune domande:

  
      
  1. E 'possibile creare un'applicazione stand-alone che non richiede un database per memorizzare i dati?

  2.   
  3. Se la risposta sopra 1 # è "sì", è una buona idea per fare questo per un'applicazione che potrebbe potenzialmente bisogno di gestire un sacco di dati?

  4.   
  5. Quali sono le opzioni di dati di archiviazione di raccomanderesti per l'utilizzo con un'applicazione C ++?

  6.   

Grazie!

Aggiorna Beh, ci sono stati un sacco di buone risposte a questa. Questo è ad esempio un ottimo sito con tanti collaboratori. Si scopre che io non potrei davvero bisogno di andare via C ++ per ora. Ora mi rendo conto che sto più interessato a scrivere un'applicazione che funzione può come un sistema organizzativo "libreria" più di quanto io voglio perseguire C ++. Grazie a tutti per le vostre risposte!

È stato utile?

Soluzione

  

E 'possibile creare un'applicazione stand-alone che non richiede un database per memorizzare i dati?

Sì, si potrebbe fare una sorta di formato di file personalizzato per la memorizzazione dei dati.

  

Se la risposta a 1 # di cui sopra è "sì", è una buona idea per fare questo per un'applicazione che potrebbe potenzialmente bisogno di gestire un sacco di dati?

In realtà non è una buona idea, a meno che non si vuole veramente conoscere la memorizzazione dei dati in un file strutturato.

  

Quali sono le opzioni di dati di archiviazione di raccomanderesti per l'utilizzo con un'applicazione C ++?

mi piacerebbe guardare SQLite . Si tratta di una base di dati, ma non ha bisogno di un motore separato.

Altri suggerimenti

Se non si desidera utilizzare un database, si potrebbe desiderare di salvare i dati in un file (o forse più di uno). Se è così, la domanda è probabilmente: il formato di file è il migliore? La risposta dipende da vari fattori:

1) Accesso rapido, di piccola dimensione e facile da analizzare? La risposta è "dati binari". Basta scrivere i dati direttamente così com'è nel file di output utilizzando fwrite . Ci sono due aspetti negativi: i file non sono leggibili ed è ingombrante per mantenere diverse versioni. Se i dati letti non è esattamente quello che ci si aspetta, si esegue rapidamente nei guai.

2) umana leggibile e di facile manutenzione? Questo è ciò che XML è per. Ci sono pronte per l'uso parser come TinyXML che sono ottimi strumenti per la scrittura dei dati in un file. Il rovescio della medaglia è che la scrittura caricamento / salvataggio di routine richiede più tempo (un sacco è molti casi).

3) Le biblioteche che fanno il lavoro per voi. L'MFC fornisce la classe CArchive, ma ci sono altri e, probabilmente, migliori strumenti per farlo.

  1. Si
  2. Dipende dai dati, "un sacco di dati" è relativo, si potrebbe scoprire che le informazioni su 1000 libri possono essere memorizzati in diversi MB, allora sarebbe un peso inutile per negozio che in un DB, a meno che non si tratta di un peso leggero DB SQLite come
  3. mi sento di raccomandare attenersi a un formato testo come CSV o XML .

Per motivi di apprendimento, avrebbe aiutato un sacco di non utilizzare un motore di DB, a meno che non si vuole imparare SQL e design DB relazionale. D'altra parte, utilizzando un motore DB è la volontà di rendere lo sviluppo più veloce e più facile perché, perché creerà indici per diversi pezzi di dati per facilitare la ricerca semplice ed efficiente.

Quindi, tocca a voi.

Hmmm ...

Naturalmente, si può fare questo.

Quello che stai parlando di fare è tornare indietro nel tempo al periodo prima del RDBMS ha avuto successo. Questo non è difficile da fare, ma si potrebbe anche prendere alcune lezioni apprese:

  1. Prima di iniziare la codifica - o, almeno, prima di scrivere il codice di accesso ai dati, si fa la struttura del database, come se si stesse andando ad utilizzare un database - che dati avete bisogno? Si può ridurre il numero di attributi ( "campi") è necessario? Quali sono i punti in comune tra i tipi di supporti presenti nella libreria? ecc.
  2. Considerare l'uso di alberi di directory e dei file come un po 'di una struttura di stoccaggio ad hoc. Questo metterà i dati direttamente nelle mani di utilità della riga di comando, se avete bisogno o desiderano gestire i dati oltre attuali abilità del tuo programma. Ad esempio, i libri potrebbero essere tutti in una sottodirectory libri, e all'interno di questo, si potrebbero utilizzare ISBN o il titolo come nome del file. Guardo le cose che, naturalmente, sorta come un nome di file utilizzando ls, dir, o qualunque sia il vostro usi CLI.
  3. Un'altra scelta buona sarebbe quella di metterlo in un formato XML. Forse entrambe le cose - utilizzare una gerarchia di directory per il layout generale dei dati e inserire i dati di libreria in file flat in un formato XML. Questo potrebbe rivelarsi utile ad un certo punto.
  4. inserire i dati solo in formato testo normale come stringhe - senza dati binari! Questo è importante, ancora una volta, per essere in grado di accedere / modificare i dati al di fuori del programma.
  5. Con questa strategia, è possibile utilizzare strumenti di sistema come grep, sed, lex e così via per fare cose completamente non pianificate con i dati, in caso di necessità.
  6. hanno una caratteristica - o scrivere programma di lettura separata - che cammina il vostro "database" ed emette tutto il suo contenuto come testo normale, una riga per ogni voce. Si potrebbe anche avere opzioni che raccontano è quale tipo di supporto per l'output, ecc Inoltre, includono una bandiera che consente di impostare il delimitatore utilizzato tra gli attributi per l'uscita - separati da virgola è una scelta comune, ma si potrebbe anche voler solo uno spazio, un ritorno carrage, nuova linea, o qualsiasi altra cosa. Se si fanno una bandiera opzionale per lasciare che l'utente utilizza il niente e fornire predefinito preferito, dovrebbe andare bene.
  7. modularizzare il codice in modo da poter sostituire la strategia di storage in seguito, se lo desidera e non devono re-incidere l'intero programma. Si potrebbe anche fornire più strategie di storage.

Questo dovrebbe farlo.

Si noti che la quantità di dati che sarà la gestione, con l'hardware del computer moderno, non è probabile che mai diventare un problema di prestazioni o di spazio, quindi non preoccupatevi di salvare un paio di byte -. Non vale la seccatura

In bocca al lupo, e godetevi il viaggio.

  1. Sì.
  2. Può essere, ma a meno che le vostre esigenze sono più specializzato di quello che appare, un gestore di database general purpose è probabilmente un modo migliore per andare.
  3. Per una cosa del genere, mi piacerebbe pensare di utilizzare uno dei (molti) i gestori di database integrato che sono disponibili.

Dato che si sta (apparentemente) a fare questo in primo luogo per l'auto-educazione, non uso reale, potrebbe ha senso scrivere il codice senza un gestore di database per gestire la memorizzazione. Scrivere tutto il codice sulla vostra volontà (con un po 'di attenzione) tipicamente risultato in velocità leggermente superiore, a scapito di un po' di lavoro extra e di solito una perdita di flessibilità. Il problema più grande da un punto di vista di apprendimento è che un po 'di ciò che si impara a fare questo si applica solo in circostanze piuttosto stretti (ad esempio, per la maggior parte delle applicazioni tipiche, è consiglia di utilizzare un gestore di database, in modo da imparare a fare a meno guadagna raramente molto).

Un po 'dipende anche l'utilizzo da / pubblico previsto. Se si desidera supportare più di un utente alla volta, le cose si fanno molto più difficile quasi subito (almeno farlo in modo efficiente). Se siete interessati solo a un utente di essere in grado di accedere al database in un momento, che mantiene le cose molto più semplice.

Io consiglio anche SQLite .

Dalla loro pagina web:

"SQLite è una libreria software che implementa un self-contained, senza server, configurazione zero, motore di database SQL transazionale. SQLite è il motore di database SQL più diffuso al mondo. Il codice sorgente per SQLite è di dominio pubblico ".

"Pensate a SQLite non come un sostituto per Oracle, ma come un sostituto per fopen ()"

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