Domanda

Spero che questo è semplice.

Ho eseguito una web app Rails dove sto ospitando circa 100 siti web della scuola. Le maniglie uno app tutti i siti, e ho un'interfaccia di gestione in cui siamo in grado di aggiungere e rimuovere le scuole ecc ...

Voglio aggiungere una statistica a questa interfaccia, che è lo spazio su disco totale utilizzato da tale scuola. Ogni file scuole sono memorizzati in una struttura di directory separata in modo che sia facile da scoprire. L'unico problema è che ho bisogno di essere veloce. Quindi la domanda è qual è il modo più veloce per trovare queste informazioni. Se si potesse essere trovati tramite una chiamata rubino al volo che sarebbe grande, ma sono aperto a tutto ciò funzionerà. Idealmente mi piacerebbe evitare di dover cache e sfondo generare questi dati (almeno a livello di Rails). :)

È stato utile?

Soluzione

Se si vuole andare con puro Rubino si può provare questo codice. Anche se siete alla ricerca di velocità sono sicuro du sarebbe più veloce.

def dir_size(dir_path)
  require 'find'
  size = 0
  Find.find(dir_path) { |f| size += File.size(f) if File.file?(f) }
  size
end

dir_size('/tmp/')

Altri suggerimenti

`du -s "/your/path/here"`.split("\t").first.to_i #returns bytes

Hai provato solo in esecuzione du su ogni directory su richiesta? Sulla mia casella di invecchiamento che posso fare un utilizzatore a valle su una directory 15M in ~ 4 ms e un 250M in ~ 50ms. Questi sembra sia ragionevole per il compito a portata di mano. Quanto sono grandi le directory? Prima di tentare di ottimizzare il proprio questo accertarsi che la sua davvero vale la pena. YAGNI e tutto il resto.

Si può sempre tenere traccia sulla caricati quando essi forniscono il file. In questo modo si solo bisogno di monitorare il delta come file vengono aggiunti o rimossi.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top