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

    Ottimizzazione cartelle per un filesystem veloce

    Ciao,
    chiedo a voi sistemisti un parere sulla gestione dei files.

    Un processo collegato ad una web application produce files in quantità elevata e sempre crescente.
    I files vengono salvati su disco (non su DB).

    Il DB gestisce la nomenclatura, tiene nota delle locazioni dei files e dei loro attributi, e decide anche quando creare una nuova directory in base a:
    [list=1][*]criteri semplici come il mese/anno della creazione dei files;[*]criteri meno semplici come la giusta quantità di files per cartella.[/list=1]
    Il secondo punto è quello che mi interessa: non avendo files di dimensione fissa, non posso stabilire dei parametri costanti per creare una nuova cartella.

    :ignore:

    Avendo per esempio 3000 piccoli files da 10KB l'uno tutti nella stessa cartella, avrei una bassa velocità di accesso ai dati.
    Con 500 files di cui la metà di peso superiore a 10MB, il filesystem sarebbe ugualmente lento, dovendo gestire una cartella da 5GB in 500 files.

    Per cui chiedo: quale è il miglior criterio che permette al filesystem di offrire performance apprezzabili considerando sia dimensione che numero di files per directory?
    Emanuele DG
    <?php echo "Proverbio zen(d): vivi ogni giorno come se fosse il ".date('d M Y', time()); ?>
    Intellectual property

  2. #2
    Utente di HTML.it L'avatar di nifriz
    Registrato dal
    Jan 2008
    Messaggi
    2,058
    Potresti fare un controllo incrociato, ossia creare una nuova cartella se superato un certo numero di file o una certa dimensione... Tipo ogni 250 file o 2,5 GB di dati crei una nuova cartella... ti piace come soulzione?


    Bell'avatar

  3. #3
    Originariamente inviato da nifriz
    Potresti fare un controllo incrociato, ossia creare una nuova cartella se superato un certo numero di file o una certa dimensione... Tipo ogni 250 file o 2,5 GB di dati crei una nuova cartella... ti piace come soulzione?


    Bell'avatar
    Grazie!
    È proprio quello che avevo intenzione di fare:

    Codice PHP:
    $max_size 250000;
    $max_files250;

    if (
    filesize($dir_path) > $max_size Or count($dir_files) > $max_files) {
         
    // new folder...

    Ma non ho la minima idea di un valore concreto per i due limiti.
    Pensi che 250GB e 250 files sono numeri validi?
    Emanuele DG
    <?php echo "Proverbio zen(d): vivi ogni giorno come se fosse il ".date('d M Y', time()); ?>
    Intellectual property

  4. #4
    la dimensione non è importante più di tanto, invece lo è il numero.

    Un numero inteliggente di distribuirli, che ritengo sia abbastanza casuale, è usare come nome del file un hash, ovvero md5(uniqid(microtime(), true)) e poi usare la prima lettera e poi le prime due lettere per definire le cartelle dove mettere il file

    Ad esempio se l'hash è
    abcdef1234567890..........

    lo devi andare a mettere dentro
    a/ab/abcdef1234567890..........
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  5. #5
    Utente di HTML.it L'avatar di nifriz
    Registrato dal
    Jan 2008
    Messaggi
    2,058
    Non so indicarti una dimensione precisa, così come per il numero di file... Dipende dalla macchina che utilizzi, OS, dimensioni del cluster, velocità dei dischi

    L'unica cosa che mi sento di consigliarti è di fare dei test e cercare di capire quale sia la fascia di risposta migliore e prendere il valore intermedio...

    Ad esempio se ti accorgi che 200 file lavorano bene con quasi tutte le dimensioni e 500 arrancano, un 350 è la scelta meno traumatica per tutte le possibilità che si presentano

  6. #6
    Utente di HTML.it L'avatar di nifriz
    Registrato dal
    Jan 2008
    Messaggi
    2,058
    Originariamente inviato da daniele_dll
    la dimensione non è importante più di tanto, invece lo è il numero.

    Un numero inteliggente di distribuirli, che ritengo sia abbastanza casuale, è usare come nome del file un hash, ovvero md5(uniqid(microtime(), true)) e poi usare la prima lettera e poi le prime due lettere per definire le cartelle dove mettere il file

    Ad esempio se l'hash è
    abcdef1234567890..........

    lo devi andare a mettere dentro
    a/ab/abcdef1234567890..........

    Non ho capito cosa vuoi fare? :master:
    Magari è l'idea più fica del mondo, ma non capisco

  7. #7
    Originariamente inviato da daniele_dll
    la dimensione non è importante più di tanto, invece lo è il numero.

    Un numero inteliggente di distribuirli, che ritengo sia abbastanza casuale, è usare come nome del file un hash, ovvero md5(uniqid(microtime(), true)) e poi usare la prima lettera e poi le prime due lettere per definire le cartelle dove mettere il file

    Ad esempio se l'hash è
    abcdef1234567890..........

    lo devi andare a mettere dentro
    a/ab/abcdef1234567890..........
    Grazie Daniele
    Potrei implementare le cartelle preimpostate relative alla data con sottocartelle casuali generate attraverso l'hash...
    È una buona soluzione :yesss:
    Emanuele DG
    <?php echo "Proverbio zen(d): vivi ogni giorno come se fosse il ".date('d M Y', time()); ?>
    Intellectual property

  8. #8
    Utente di HTML.it L'avatar di nifriz
    Registrato dal
    Jan 2008
    Messaggi
    2,058
    Originariamente inviato da emanueledg
    Grazie Daniele
    Potrei implementare le cartelle preimpostate relative alla data con sottocartelle casuali generate attraverso l'hash...
    È una buona soluzione :yesss:
    CREDO DI AVER CAPITO ADESSO!
    Si bella soluzione e ASSAI casuale

  9. #9
    E' una soluzione abbastanza comune. Anche squid per la cache usa una soluzione simile
    The fastest Redis alternative ... cachegrand! https://github.com/danielealbano/cachegrand

  10. #10
    Utente di HTML.it L'avatar di lion1810
    Registrato dal
    Nov 2002
    Messaggi
    1,543
    Originariamente inviato da nifriz
    Non so indicarti una dimensione precisa, così come per il numero di file... Dipende dalla macchina che utilizzi, OS, dimensioni del cluster, velocità dei dischi

    .. forse anche dal filesystem utlizzato??

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.