Memorizza molte stringhe di grandi dimensioni con frequenti "accodamenti" e poche letture

3

Nel mio progetto attuale, ho bisogno di memorizzare una stringa ASCII molto lunga per ogni istanza di un dato oggetto. Questa stringa riceverà 2 anteprime al minuto e non verrà recuperata così frequentemente.

Lo scenario peggiore è una stringa da 5-10 MB. Avrò migliaia di istanze del mio oggetto e sono preoccupato che l'archiviazione di tutte quelle stringhe nel filesystem non sarebbe ottimale, ma non riesco a pensare a una soluzione migliore.

Qualcuno può suggerire un'alternativa? Forse un negozio con valore chiave? In questo caso, quale? Qualche altro pensiero?

    
posta Thiago Moraes 08.12.2012 - 01:38
fonte

3 risposte

3

Aggiungere alcuni caratteri a una stringa da 10mb suona come una scelta scadente. Esegui il backup e considera ciò che stai effettivamente facendo, senza l'ipotesi / conclusione che l'oggetto in questione sia una stringa. Forse una vista dell'oggetto (usata di rado) deve essere una stringa, ma questa è un'altra questione.

    
risposta data 08.12.2012 - 03:54
fonte
1

Inseriscili come articoli / righe separati. Aggiungili insieme su read.

Questo può essere fatto in un DB relazionale o in un file semplice.

    
risposta data 08.12.2012 - 10:28
fonte
1

Ecco come risolverei questo:

Vorrei memorizzare i dati come una serie di blocchi all'interno di file da 2 GB. Ogni blocco ha bisogno dell'ID di stringa, della sequenza di blocchi per quella stringa, dell'ID di file e dell'offset del blocco precedente e di circa 2k di spazio di dati per scrivere i caratteri di stringa in. Quando viene riempito lo spazio dati per quel blocco, allora si assegna il blocco successivo non utilizzato per continuare il flusso di dati e il postback al blocco precedente.

Per ciascuna stringa di oggetto, è necessario tenere in memoria la sequenza di blocchi, l'handle di file, l'offset di file e i byte rimanenti che possono essere aggiunti a questo blocco.

Quando hai bisogno di ricreare la stringa da leggere, sai quanto è grande la stringa, in base al numero di sequenza del blocco, e quindi devi leggere i dati da ciascuno dei blocchi.

Sulla base di migliaia di oggetti con 2 scritture al secondo per oggetto, l'infrastruttura del disco deve essere considerata.

    
risposta data 08.12.2012 - 04:11
fonte

Leggi altre domande sui tag