Come scegliere il metodo di memorizzazione dei dati per i dati generati dagli utenti?

1

In un programma che sto scrivendo, ho 3 modi diversi per memorizzare i dati generati dagli utenti:

(a) XML Files for each object (.Net Serialization)
(b) SQL Database (MSSQL)
(c) Massive terrifying blob of data in 1 file (I'm against this one)

Non c'è assolutamente alcuna differenza teorica in termini di prestazioni o dimensioni del file in questo (ipotetico) scenario, ma quale sarebbe il migliore da usare?

SQL overkill (Considerando che ci saranno fino a 2 milioni di elementi nel database), o l'opzione migliore? Da dove viene tracciata la linea tra BLOB, XML e SQL?

L'indice dovrebbe essere collegato al nome file (un GUID) o a un ID oggetto SQL (un GUID), quindi non c'è differenza nella funzionalità di ricerca. L'XML è memorizzato in più file e la dimensione del file non è un problema, quindi non è necessario analizzare l'intera cosa per accedere a un elemento specifico (basta aprire un flusso di file in {GUID} .xml)

Modifica: aggiungo altre informazioni per rendere più chiaro ciò che sto chiedendo.

Sto lavorando a un programma per un cliente che si trova nel settore della progettazione dei profumi. In tutti i casi, l'indice di ricerca sarà separato (il codice di qualcun altro che non oso toccare) e sarà indicizzato in memoria.

L'accesso casuale ai dati non è necessario in questo caso, poiché le persone recupererebbero le informazioni complete per un singolo elemento.

In un modo molto più chiaro di dire: se non hai bisogno di accedere a dati casuali in un database, e XML è più facile, va bene usare quello invece di un file SQL?

Modifica II: In entrambi i casi, sarà installato su un server di grandi dimensioni, quindi non sono preoccupato che il client abbia accesso a MSSQL o non abbia abbastanza spazio per ~ 1 KB extra per entrata ( Se non si utilizza SQL). Modifica III: Sto facendo solo selezionare tutte le query (es. SELECT * FROM (DB) WHERE ID = (GUID)) Oppure (Xml.deserialize ((GUID) .xml))

    
posta Colorfully Monochrome 28.03.2014 - 08:10
fonte

1 risposta

1

In definitiva, si tratta di vedere come saranno i dati e come verranno utilizzati.

Tuttavia, se ci saranno 2 milioni di articoli, SQL è quasi certamente la scelta migliore di questi tre.

I file di testo non hanno accesso casuale, quindi se vuoi accedere all'articolo 1.999.999, dovrai leggere l'intero file per raggiungerlo. E non vi è alcun motivo per caricare il proprio formato di archiviazione quando questo problema è già stato risolto.

Il vantaggio della serializzazione XML è la facilità d'uso: è possibile trasferire senza problemi da variabili in memoria a dati in memoria, senza doversi preoccupare di ciò. Tuttavia, i file XML sono un modo inefficiente per archiviare grandi quantità di dati. La stessa sintassi XML occupa spesso più spazio dei dati. E, ancora, non c'è accesso casuale, perché è memorizzato in un file di testo. Un file XML è in realtà peggiore per l'accesso casuale rispetto a un file di testo piatto, perché per definizione è possibile analizzare l'intero file per accedere a qualsiasi parte di esso, a differenza di un file di testo, dove è possibile accedere alla prima riga rapidamente. Dividere il contenuto in più file aiuta, ma poi hai una strategia di accesso a più livelli in cui devi prima individuare il file corretto, quindi analizzare il file per ottenere il contenuto desiderato.

Un database SQL è facile da configurare e utilizzare, e se sei preoccupato per "overkill", ci sono versioni leggere disponibili, come SqlLite . Inoltre, un programma di mappatura relazionale degli oggetti può gestire parte della complessità della gestione dati nel database per te, se sei preoccupato per questo.

    
risposta data 28.03.2014 - 09:10
fonte

Leggi altre domande sui tag