Risparmio efficiente di stringhe lunghe con sottostringhe ricorrenti

2

seguente problema: ho bisogno di salvare un sacco di stringhe xml di lunghezza e struttura variabili. Come con xml, molte sottostringhe sono uguali (alcuni elementi, combinazione di attributi e valori). Spesso l'intero documento è lo stesso, fatta eccezione per alcune piccole parti.

Dato che ho un sacco di queste stringhe, ho bisogno di salvare le strutture xml il più possibile in termini di dimensioni.

Un'idea a cui ho pensato sostituisce spesso le string con variabili. Diciamo che attribute=verylongvalueetcetc appare in molte strutture xml, la mia idea sarebbe sostituire la stringa con il segnaposto come #1# (che salverebbe 26 caratteri), e quindi sostituirla quando ne ho bisogno di nuovo.

Qualcuno può pensare a modi e metodi migliori?

// Modifica: alla fine, voglio salvare le stringhe in più righe in MongoDB

    
posta mietzekotze 26.04.2016 - 15:36
fonte

1 risposta

2

Questo è essenzialmente il numero di algoritmi di compressione che funzionano (se sei interessato, ecco una spiegazione dettagliata di GZIP ), che è anche il motivo per cui sono così efficienti quando comprimono il testo in generale e XML in modo specifico.

Se fossi in te, inizierei ponendomi le seguenti domande:

  • La dimensione dei dati è davvero importante? $ 0,0300 per GB per uno storage estremamente affidabile , il mantenimento di alcuni gigabyte di dati è estremamente economico .

  • Se le dimensioni dei dati contano davvero (ad esempio se si parla di memorizzare migliaia di terabyte di dati, o se abbiamo solo pochi megabyte ma è necessario trasferirli tutti regolarmente su una connessione lenta o se abbiamo qualche kilobyte da archiviare su hardware embedded che ha memoria limitata), è un'opzione JSON? Il vantaggio sarebbe abbastanza alto?

  • Da quando hai menzionato MongoDB, non capisco perché stai usando XML in primo luogo (immagino che lo stia archiviando come un BLOB in un documento in MongoDB). Se hai un oggetto che vuoi archiviare in MongoDB, non serializzarlo su XML per archiviarlo come BLOB. Invialo così com'è a MongoDB e lascia che MongoDB gestisca il lavoro di archiviazione efficiente dei dati .

  • Indipendentemente dalla risposta alla domanda precedente, che dire dell'utilizzo della compressione ordinaria? Nella maggior parte delle lingue / framework, l'uso di un algoritmo di compressione esistente dovrebbe essere semplice. L'unico problema è il carico della CPU se i dati sono effettivamente su hardware embedded con una CPU molto, molto lenta (mi aspetto che ciò sia irrilevante per dispositivi come smartphone, tablet, computer desktop e server ). Devi quindi confrontare tutti e due gli approcci e scoprire quale è meglio per te.

risposta data 26.04.2016 - 15:49
fonte

Leggi altre domande sui tag