Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 26
  1. #1

    Ricerca Sequenziale vs Binaria per grandi file .csv

    ciao a tutti, ho una domanda nuova

    secondo voi per cercare dati dentro un GROSSO archivio .csv è meglio un sistema di ricerca sequenziale o binaria?

    ovviamente intendo con php e in relazione alla velocità di esecuzione.

    ciao,
    jack.

  2. #2

    Re: Ricerca Sequenziale vs Binaria per grandi file .csv

    [supersaibal]Originariamente inviato da mdsjack
    ciao a tutti, ho una domanda nuova

    secondo voi per cercare dati dentro un GROSSO archivio .csv è meglio un sistema di ricerca sequenziale o binaria?

    ovviamente intendo con php e in relazione alla velocità di esecuzione.

    ciao,
    jack. [/supersaibal]
    è una follia ricercare dentro un csv ...

    cmq devi andare per forza sul sequenziale, non hai chiavi
    tranne che mantieni tu un indice esterno che ti gestisca i campi di ricerca e quindi accelera tutto tremendamente
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  3. #3
    pensavo al sistema binario è proprio per evitare indici.

    il csv sarebbe ordinato in ordine crescente proprio nel campo "indice", a cui poi corrisponde un valore.

    un sistema ad indice esterno sai dirmi quanto fa guadagnare a grandi linee?

  4. #4
    TANTO

    xche?

    dipende da come lo fai

    se ad esempiofai un file di questo tipo ...

    [HEADER]
    1BYTE[CHAR]4BYTE[UINT]4BYTE[UINT]
    .
    .
    .
    .
    .

    [CHIAVI]
    nBYTE[CHAR()]4BYTE[UINT]1BYTE[CHAR-SEPARATORE]

    e fai 256 blocchi di questi ... e nel primo byte inserisci il primo carattere del valore che devi cercare ... sai all'instante da dove iniziare (per vedere dove leggere nella testata del file è estremamente semplice ... 9 * valore ascii del carattere)

    il valore unsigned int (devi sprintfarlo con %u senno lo hai signed in php) contiene la posizione iniziale di quei valori , mentre il secondo uint contiene la posizione finale ... semplicemente estrai quel blocco di dati e lo splitti in base ad un separatore che hai precedentemente stabilito ... a questo punto hai un array, piccolo rispetto alle dimensioni complessive, dell'indice ... usi ad es un ciclo while ... e appena trovi il valore che ti interessa leggi gli ultimi 4 byte ed estrai la riga ... e poi apri il CVS ... ed estrai (devi leggere carattere per carattere, in ogni caso dato che devi scomporti, tramite un parser, il contenuto del CSV) fino all'accapo finale

    in questo modo ... puoi anche avere 1 milione di righe dentro il cvs ... ma la velocità di ricerca è ESTREMAMENTE alta
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  5. #5
    il bello è che quando mi spieghi qualcosa, io capisco il 20%.

    cmq grazie. per adesso lascio il sequenziale e addio al binario.

  6. #6
    LOL

    guarda che è semplice ... ci sono, MAX, fatto bene, 2 giorni di lavoro ^^
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  7. #7
    dico un'ovvietà: ovviamente il file deve essere ordinato per i valori tra cui devi cercare, sennò la ricerca binaria è inutile

  8. #8
    [supersaibal]Originariamente inviato da skidx
    dico un'ovvietà: ovviamente il file deve essere ordinato per i valori tra cui devi cercare, sennò la ricerca binaria è inutile [/supersaibal]
    beh ... in realtà no
    usando un file indice non ha importanza l'ordinamento

    al max ti può accelerare un po ... ma se usi il sistema che ho descritto su, lo speedup è minimo ))
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  9. #9
    sbav, ma continuo a non capirci niente.

    non sono un informatico...

  10. #10
    [supersaibal]Originariamente inviato da daniele_dll
    beh ... in realtà no
    usando un file indice non ha importanza l'ordinamento [/supersaibal]
    Daniele, se usi un file indice ordinato, la ricerca binaria la fai sull'indice, non sul file, ma sempre ordinato deve essere quello su cui cerchi.

    Per la ricerca binaria, ovunque tu la faccia, i valori da cercare devono essere ordinati, sennò è perfettamente inutile, conviene fare una sequenziale.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.