Calcolo dello spazio di archiviazione ottimale per nome, indirizzo, telefono, fax ed e-mail

1

Considerate le seguenti ipotesi:

  • La quantità di spazio di archiviazione disponibile è molto limitata
  • Tutti i dati sono internazionali
  • È necessario conservare la maggior quantità possibile di spazio di archiviazione poiché verrà utilizzata per qualcos'altro

Esiste uno standard o una best practice ampiamente accettati che definiscono la quantità di spazio di archiviazione da assegnare a tali articoli?

Nota : non cerco ipotesi, ma per fatti come "il 97,5% di tutti i nomi si inserisce in 70 byte usando UTF-8" e "Un indirizzo internazionale deve contenere almeno il campo 1, campo2 e field3 di size1, size2 e size3 ".

Modifica : sto cercando i campi / le lunghezze da utilizzare nell'interfaccia utente. Non è una tecnica per memorizzarlo in modo efficiente.

    
posta mibollma 01.01.2012 - 17:10
fonte

2 risposte

3

Venendo da una prospettiva leggermente diversa, dal momento che il tuo obiettivo è quello di archiviare le cose nel modo più compatto possibile, evitare l'uso di campi a larghezza fissa.

Per estrarre dal tuo esempio:

97.5% of all names fit into 70 bytes using UTF-8

Non dovresti avere un'assegnazione fissa di 70 byte per il nome.

Invece, disponi di un'allocazione fissa per l'intero record, ad esempio 200 byte, quindi archivia tutti i dati in quell'unico record con un delimitatore tra i campi.

For example:
Title/Given/Middle/Family/KnownAs/Born
Mr/William/Henry/Gates/1955-10-28

Questo è un classico compromesso spazio / tempo poiché la ricerca di una tale struttura sarà più lenta.

Un vantaggio chiave di questa struttura è che consente ad alcuni campi di essere insolitamente lunghi senza compromettere lo spazio di archiviazione. Pertanto, se per caso l'indirizzo di una persona ha richiesto 70 caratteri o se il suo nome completo ne ha richiesti 90, è possibile accettarlo a condizione che la stessa persona non abbia entrambi.

    
risposta data 01.01.2012 - 22:20
fonte
2

Se lo spazio è limitato, l'overhead di saltare gli elementi uno per uno non sarebbe così importante.

Quindi, puoi costruire un albero, fatto di liste di elementi con prefissi di lunghezza. Puoi codificare le lunghezze come byte singoli e, per i record che devono essere più grandi di quanto consentito, puoi spostare il valore a sinistra (che non sprecherebbe perché è compensato dal campo più piccolo).

Inoltre, se vuoi semplificare ulteriormente il tuo codice, potrebbe aver senso inserire un flag nel campo delle dimensioni che indica se il record è raw o un elenco. Ciò renderebbe banale l'analisi dell'intero set di dati (in modo incrementale o su un singolo passaggio).

Sarebbe molto più efficiente dell'approccio statistico a lunghezza fissa.

Inoltre, potresti prendere in considerazione l'idea di applicare una qualche forma di compressione all'intero oggetto per risparmiare un po 'di spazio.

    
risposta data 02.01.2012 - 00:36
fonte

Leggi altre domande sui tag