PHP SplFixedArray Come gestire miliardi di indici?

0

Ho creato un sistema db flatfile che funzionerà come un sistema mini-noSQL e ha diviso db in file più piccoli, e ho fatto un wrapper SplFixedArray per questo con un metodo per la ricerca dell'uso costruito su preg_grep.

Tutto funziona molto bene fino ad ora, ma se l'array diventasse più di miliardi di indici come gestirlo? Durante la ricerca, itererà sui piccoli file, quindi otterrà le corrispondenze e lo metterà in un fixedArray temporaneo, quindi, se trovasse corrispondenze molto grandi?

Come funzionano i dbms noSQL?

NOTA: Se ti chiedi perché lo faccio senza una vera soluzione noSQL, ti dirò perché voglio saperne di più.

    
posta Mohammed Al Ashaal 17.11.2013 - 19:55
fonte

2 risposte

0

Generalmente viene utilizzato un buffer per questo tipo di operazione, spesso una struttura di dati FIFO (First In, First Out) in cui, quando arrivano nuove informazioni che sarebbero oltre la capacità del buffer, le informazioni più vecchie (prime) nel buffer sono spurgato per fare spazio ai nuovi dati.

Questo è un po 'come leggere un file riga per riga, emettere i risultati ovunque li desideri e poi leggere la riga successiva. Si cerca lo stesso obiettivo: evitare di bloccare lo script a causa dell'eccessivo utilizzo della memoria.

Quindi, cosa succede quando si dispone di un set di dati che è troppo grande per essere conservato in memoria? In breve, non puoi continuare. O hai bisogno di interrompere il lavoro e restituire qualcosa come "set di risultati troppo grande - ecco le prime n occorrenze", o devi inviare i risultati a un file o qualcosa di simile che ti permetta di estrarre le cose dalla RAM in modo da poter continuare a lavorare .

Un esempio canonico è diventato SAX vs DOM nell'elaborazione XML. Quando i set di dati sono grandi, il lato negativo è che si perde la semplicità e la comodità di essere in grado di spingere tutto nella RAM e non preoccuparsene. Richiede quasi sempre un cambiamento nella strategia e nelle tecniche di codifica per gestire tali problemi.

"Colui che aumenta i dati grezzi, aumenta la complessità della codifica." - Proverbio computerizzato

    
risposta data 18.11.2013 - 04:13
fonte
0

In pratica sei incappato nell'idea dell'intero sistema operativo di paging / memoria virtuale . .. quello che stai pensando è in realtà solo un po 'diverso dal problema che gli sviluppatori di sistemi operativi hanno avuto a che fare con i requisiti di memoria del sistema diventando troppo grandi per gestire nella memoria fisica.

Un sacco di persone davvero intelligenti hanno lavorato a questa idea per un tempo molto lungo ... potresti fare bene a ricercare le varie soluzioni.

    
risposta data 18.11.2013 - 14:17
fonte

Leggi altre domande sui tag