scelta linguaggio per buon accesso al disco
Moderatore: Staff
Regole del forum
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
1) Citare in modo preciso il linguaggio di programmazione usato.
2) Se possibile portare un esempio del risultato atteso.
3) Leggere attentamente le risposte ricevute.
4) Scrivere i messaggi con il colore di default, evitare altri colori.
5) Scrivere in Italiano o in Inglese, se possibile grammaticalmente corretto, evitate stili di scrittura poco chiari, quindi nessuna abbreviazione tipo telegramma o scrittura stile SMS o CHAT.
6) Appena registrati è consigliato presentarsi nel forum dedicato.
La non osservanza delle regole porta a provvedimenti di vari tipo da parte dello staff, in particolare la non osservanza della regola 5 porta alla cancellazione del post e alla segnalazione dell'utente. In caso di recidività l'utente rischia il ban temporaneo.
- ZeroUno
- Staff
- Messaggi: 5441
- Iscritto il: ven 2 giu 2006, 14:52
- Nome Cognome: Matteo Rossini
- Slackware: current
- Kernel: slack-current
- Desktop: ktown-latest
- Distribuzione: 01000000-current
- Località: Roma / Castelli
- Contatta:
scelta linguaggio per buon accesso al disco
Devo scrivere un programma e sto ancora decidendo che linguaggio utilizzare.
Solitamente uso bash per quasi tutto; altre volte php. Questa volta ancora non lo so.
Il programma non necessita di grosse difficoltà elaborative. Il suo collo di bottiglia sarà plausibilmente il numero di accessi al disco.
Il programma dovrà, al primo lancio, indicizzare una struttura di directory, il cui contenuto può anche essere di migliaia di file.
Ai lanci successivi il programma dovrà essere in grado di dirmi nel minor tempo possibile se:
1) sono stati aggiunti file
2) sono stati eliminati file
3) sono stati spostati file
4) sono stati modificati file
5) varie
Il programma potrà fare affidamento in parte sulla data di modifica perchè devo contemplare anche il fatto che
a) la data viene modificata nonostante non venga modificato il file
b) il file venga modificato nonostante il file rimanga non modificato
la cache dovrà quindi contenere anche gli md5 dei file.
tutto questo suppongo che necessiti una lettura ottimizzata dell'I/O e una cache dei file ben strutturata
Ancora non so bene la struttura dati che utilizzerò; questo dipende dal linguaggio che sceglierò. Potrebbe trattarsi di un semplice file di testo o di un database mysql.
Per il linguaggio, non so tutti quanti i migliori strumenti che mi mettono a disposizione.
- bash (che è quello che uso di più) mi fornisce una buona serie di strumenti prefatti quali ls, find, sort, uniq, grep e compagnia bella. Di contro le strutture dati che offre non possono definirsi tra le più evolute, e l'accesso a mysql non è tra le cose più semplici da gestire (in caso la query ritorni più di un record)
- php (che anche uso parecchio e che può essere usato non solo per il web), offre strutturalità di programmazione e di dati buone e un buon accesso al db; di contro non gli trovo un adeguato supporto per il filesystem
- python non lo conosco abbastanza e sinceramente nemmeno mi piace
- java pure non mi piace nonostante sarebbe il caso di cominciare ad impararlo
- C non so che tipo di strumenti mette a disposizione; non lo conosco a sufficienza (ma a quello si ovvia) ma vorrei evitare in generale linguaggi binari; preferisco di gran lunga quelli che non richiedono un compilatore e soprattutto sono noarch.
- awk sarebbe un buon integratore a bash (ho visto che slackpkg ne fa un buon uso)
- perl non lo conosco abbastanza ma sarebbe una buona occasione per cominciare ad impararlo (una grossa lacuna per un sistemista), però non so quanti strumenti mi mette a disposizione.
Voi cosa mi consigliereste?
Ciao
01
Solitamente uso bash per quasi tutto; altre volte php. Questa volta ancora non lo so.
Il programma non necessita di grosse difficoltà elaborative. Il suo collo di bottiglia sarà plausibilmente il numero di accessi al disco.
Il programma dovrà, al primo lancio, indicizzare una struttura di directory, il cui contenuto può anche essere di migliaia di file.
Ai lanci successivi il programma dovrà essere in grado di dirmi nel minor tempo possibile se:
1) sono stati aggiunti file
2) sono stati eliminati file
3) sono stati spostati file
4) sono stati modificati file
5) varie
Il programma potrà fare affidamento in parte sulla data di modifica perchè devo contemplare anche il fatto che
a) la data viene modificata nonostante non venga modificato il file
b) il file venga modificato nonostante il file rimanga non modificato
la cache dovrà quindi contenere anche gli md5 dei file.
tutto questo suppongo che necessiti una lettura ottimizzata dell'I/O e una cache dei file ben strutturata
Ancora non so bene la struttura dati che utilizzerò; questo dipende dal linguaggio che sceglierò. Potrebbe trattarsi di un semplice file di testo o di un database mysql.
Per il linguaggio, non so tutti quanti i migliori strumenti che mi mettono a disposizione.
- bash (che è quello che uso di più) mi fornisce una buona serie di strumenti prefatti quali ls, find, sort, uniq, grep e compagnia bella. Di contro le strutture dati che offre non possono definirsi tra le più evolute, e l'accesso a mysql non è tra le cose più semplici da gestire (in caso la query ritorni più di un record)
- php (che anche uso parecchio e che può essere usato non solo per il web), offre strutturalità di programmazione e di dati buone e un buon accesso al db; di contro non gli trovo un adeguato supporto per il filesystem
- python non lo conosco abbastanza e sinceramente nemmeno mi piace
- java pure non mi piace nonostante sarebbe il caso di cominciare ad impararlo
- C non so che tipo di strumenti mette a disposizione; non lo conosco a sufficienza (ma a quello si ovvia) ma vorrei evitare in generale linguaggi binari; preferisco di gran lunga quelli che non richiedono un compilatore e soprattutto sono noarch.
- awk sarebbe un buon integratore a bash (ho visto che slackpkg ne fa un buon uso)
- perl non lo conosco abbastanza ma sarebbe una buona occasione per cominciare ad impararlo (una grossa lacuna per un sistemista), però non so quanti strumenti mi mette a disposizione.
Voi cosa mi consigliereste?
Ciao
01
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
- 414N
- Iper Master
- Messaggi: 2922
- Iscritto il: mer 13 feb 2008, 16:19
- Slackware: 15.0
- Kernel: 5.15.19
- Desktop: KDE5
- Località: Bulagna
- Contatta:
Re: scelta linguaggio per buon accesso al disco
E se usassi un sistema VCS, tipo svn, git ecc?
Hanno già le caratteristiche che richiedi (log modifiche, md5/checksum dei file ecc.).
Hanno già le caratteristiche che richiedi (log modifiche, md5/checksum dei file ecc.).
- kreen
- Linux 2.x
- Messaggi: 228
- Iscritto il: mer 1 feb 2006, 18:32
- Slackware: 12.0
- Kernel: 2.6.21.5-smp
- Desktop: KDE
- Località: Verona
Re: scelta linguaggio per buon accesso al disco
Hai mai pensato al TCL?
E' interpretato, multipiattaforma, ha un ottimo supporto per array e liste. Inoltre, non so se ti può interessare puoi scrivere delle funzioni in C e "fonderle" con la shell tcl, richiamandole come normali comandi e sfruttando il tcl per passare parametri etc...
Detto in due righe magari non hai capito un tubo, ma ti assicuro che vale la pena dare un'occhiata. Forse può risolverti una marea di problemi e capiti due/tre concetti caratterizzanti, sono convinto che andrai via liscio.
Ciao.
E' interpretato, multipiattaforma, ha un ottimo supporto per array e liste. Inoltre, non so se ti può interessare puoi scrivere delle funzioni in C e "fonderle" con la shell tcl, richiamandole come normali comandi e sfruttando il tcl per passare parametri etc...
Detto in due righe magari non hai capito un tubo, ma ti assicuro che vale la pena dare un'occhiata. Forse può risolverti una marea di problemi e capiti due/tre concetti caratterizzanti, sono convinto che andrai via liscio.
Ciao.
- masalapianta
- Iper Master
- Messaggi: 2775
- Iscritto il: lun 25 lug 2005, 0:00
- Nome Cognome: famoso porco
- Kernel: uname -r
- Desktop: awesome
- Distribuzione: Debian
- Località: Roma
- Contatta:
Re: scelta linguaggio per buon accesso al disco
visto che chiedi che il tutto venga fatto nel minor tempo possibile, la miglior scelta è il C; riguardo all'implementazione ci son due strade:
1) un demone che usi inotify per tenere d'occhio la porzione di fs interessata e annoti tutte le modifiche in un log (in C l'implementazione è banale); i vantaggi sono la velocità (hai le modifiche in tempo reale), lo svantaggio è dover tenere in piedi un demone (il che, salvo in situazioni particolari, non è un problema). Se non conosci il C, puoi implementare tutto in shell scripting, utilizzando inotifywait (o anche perl, python o ruby visto che ci sono i bindings per tutti e tre)
2) approccio non in tempo reale: la soluzione meno peggio che mi viene in mente è indicizzare i file utilizzando un hash table (le chiavi sono i filename con il path assoluto e il valore saranno gli hash del file e dei suoi metadati), dopodichè quando devi controllare se ci son state modifiche, pigli file per file, ti ricavi gli hash e li confronti con quelli presenti nell'hash table
1) un demone che usi inotify per tenere d'occhio la porzione di fs interessata e annoti tutte le modifiche in un log (in C l'implementazione è banale); i vantaggi sono la velocità (hai le modifiche in tempo reale), lo svantaggio è dover tenere in piedi un demone (il che, salvo in situazioni particolari, non è un problema). Se non conosci il C, puoi implementare tutto in shell scripting, utilizzando inotifywait (o anche perl, python o ruby visto che ci sono i bindings per tutti e tre)
2) approccio non in tempo reale: la soluzione meno peggio che mi viene in mente è indicizzare i file utilizzando un hash table (le chiavi sono i filename con il path assoluto e il valore saranno gli hash del file e dei suoi metadati), dopodichè quando devi controllare se ci son state modifiche, pigli file per file, ti ricavi gli hash e li confronti con quelli presenti nell'hash table
- ZeroUno
- Staff
- Messaggi: 5441
- Iscritto il: ven 2 giu 2006, 14:52
- Nome Cognome: Matteo Rossini
- Slackware: current
- Kernel: slack-current
- Desktop: ktown-latest
- Distribuzione: 01000000-current
- Località: Roma / Castelli
- Contatta:
Re: scelta linguaggio per buon accesso al disco
Adoro git, maE se usassi un sistema VCS, tipo svn, git ecc?
Hanno già le caratteristiche che richiedi (log modifiche, md5/checksum dei file ecc.).
1) non è pensabile di utilizzarlo su un repository di 30GB con 20000 file binari (ci ho provato una volta con 5G mischiati binari e testuali, e le performance di un git status erano pessime)
2) non ho bisogno di un versioning, non ho necessità di fare rollback di modifiche o cancellazioni di file, ma solo monitoraggio di spostamento file
@masalapianta: l'approccio che preferisco è quello non in tempo reale.
sto facendo qualche test di performance.
filesystem ntfs
n. file: 20000
max depht: 3
dimensione totale: 31G
n. file testuali: 0
creazione lista estensiva dell'elenco dei file 8 secondi:
Codice: Seleziona tutto
find -type f -printf "$FORMAT\n"
creazione elenco md5 18 minuti:
Codice: Seleziona tutto
time find -type f -printf "$FORMAT" -exec md5sum {} \;
real 18m36.085s
user 3m22.355s
sys 3m12.511s
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
- 414N
- Iper Master
- Messaggi: 2922
- Iscritto il: mer 13 feb 2008, 16:19
- Slackware: 15.0
- Kernel: 5.15.19
- Desktop: KDE5
- Località: Bulagna
- Contatta:
Re: scelta linguaggio per buon accesso al disco
come non dettoZeroUno ha scritto:Adoro git, maE se usassi un sistema VCS, tipo svn, git ecc?
Hanno già le caratteristiche che richiedi (log modifiche, md5/checksum dei file ecc.).
1) non è pensabile di utilizzarlo su un repository di 30GB con 20000 file binari (ci ho provato una volta con 5G mischiati binari e testuali, e le performance di un git status erano pessime)
2) non ho bisogno di un versioning, non ho necessità di fare rollback di modifiche o cancellazioni di file, ma solo monitoraggio di spostamento file
Dovresti usare l'opzione -b di md5sum per file binari (non testuali).ZeroUno ha scritto: creazione elenco md5 18 minuti:Codice: Seleziona tutto
time find -type f -printf "$FORMAT" -exec md5sum {} \; real 18m36.085s user 3m22.355s sys 3m12.511s
- ZeroUno
- Staff
- Messaggi: 5441
- Iscritto il: ven 2 giu 2006, 14:52
- Nome Cognome: Matteo Rossini
- Slackware: current
- Kernel: slack-current
- Desktop: ktown-latest
- Distribuzione: 01000000-current
- Località: Roma / Castelli
- Contatta:
Re: scelta linguaggio per buon accesso al disco
che differenza c'è?414N ha scritto:Dovresti usare l'opzione -b di md5sum per file binari (non testuali).
con -b ci sta mettendo metà del tempo.
non ha finito ma ha fatto 10000 in 5 minuti
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
- 414N
- Iper Master
- Messaggi: 2922
- Iscritto il: mer 13 feb 2008, 16:19
- Slackware: 15.0
- Kernel: 5.15.19
- Desktop: KDE5
- Località: Bulagna
- Contatta:
Re: scelta linguaggio per buon accesso al disco
Calcola il MD5 in modalità binaria, non testuale (che è il default). Almeno, così è scritto nella man page.ZeroUno ha scritto:che differenza c'è?414N ha scritto:Dovresti usare l'opzione -b di md5sum per file binari (non testuali).
con -b ci sta mettendo metà del tempo.
non ha finito ma ha fatto 10000 in 5 minuti
Su internet ho trovato qualche dettaglio in più:
Codice: Seleziona tutto
‘-b’
‘--binary’
Treat each input file as binary, by reading it in binary mode and outputting a ‘*’ flag. This is the inverse of --text. On systems like GNU that do not distinguish between binary and text files, this option merely flags each input file as binary: the MD5 checksum is unaffected. This option is the default on systems like MS-DOS that distinguish between binary and text files, except for reading standard input when standard input is a terminal.
- ZeroUno
- Staff
- Messaggi: 5441
- Iscritto il: ven 2 giu 2006, 14:52
- Nome Cognome: Matteo Rossini
- Slackware: current
- Kernel: slack-current
- Desktop: ktown-latest
- Distribuzione: 01000000-current
- Località: Roma / Castelli
- Contatta:
Re: scelta linguaggio per buon accesso al disco
errata corrige: mi ci ha messo 17 minuti.
EDIT:
ho provato con sum anzichè md5sum e il tempo scende a 10 minuti.
l'output non è univoco come md5 (che poi nella teoria non lo è nemmeno quello) ma per il tipo di utilizzo è sufficiente
più ottimizzato di quello non credo che esista
quello che rimane è solo accesso al disco per:
1) caricare il programma 'sum' in ram
2) leggere il file da analizzare
l'impatto del punto 1 non è trascurabile. Se infatti do
sum $(find -type f)
i tempi scendono a 6 minuti
EDIT:
ho provato con sum anzichè md5sum e il tempo scende a 10 minuti.
l'output non è univoco come md5 (che poi nella teoria non lo è nemmeno quello) ma per il tipo di utilizzo è sufficiente
più ottimizzato di quello non credo che esista
Codice: Seleziona tutto
for (i = 0; i < bytes_read; i++)
s += buf[i];
1) caricare il programma 'sum' in ram
2) leggere il file da analizzare
l'impatto del punto 1 non è trascurabile. Se infatti do
sum $(find -type f)
i tempi scendono a 6 minuti
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
- masalapianta
- Iper Master
- Messaggi: 2775
- Iscritto il: lun 25 lug 2005, 0:00
- Nome Cognome: famoso porco
- Kernel: uname -r
- Desktop: awesome
- Distribuzione: Debian
- Località: Roma
- Contatta:
Re: scelta linguaggio per buon accesso al disco
Codice: Seleziona tutto
nohup inotifywait -r -m -e modify -e delete -e create -e move --format '<%e> %w%f ' $DIR > /var/log/inotify.log 2>/dev/null &
- 414N
- Iper Master
- Messaggi: 2922
- Iscritto il: mer 13 feb 2008, 16:19
- Slackware: 15.0
- Kernel: 5.15.19
- Desktop: KDE5
- Località: Bulagna
- Contatta:
Re: scelta linguaggio per buon accesso al disco
Se usa NTFS o FAT come filesystem non credo possa usare inotifywait...masalapianta ha scritto:poi fai come preferisciCodice: Seleziona tutto
nohup inotifywait -r -m -e modify -e delete -e create -e move --format '<%e> %w%f ' $DIR > /var/log/inotify.log 2>/dev/null &
- ZeroUno
- Staff
- Messaggi: 5441
- Iscritto il: ven 2 giu 2006, 14:52
- Nome Cognome: Matteo Rossini
- Slackware: current
- Kernel: slack-current
- Desktop: ktown-latest
- Distribuzione: 01000000-current
- Località: Roma / Castelli
- Contatta:
Re: scelta linguaggio per buon accesso al disco
ottimo...
funziona tranquillamente su ntfs
funziona tranquillamente su ntfs
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
- 414N
- Iper Master
- Messaggi: 2922
- Iscritto il: mer 13 feb 2008, 16:19
- Slackware: 15.0
- Kernel: 5.15.19
- Desktop: KDE5
- Località: Bulagna
- Contatta:
Re: scelta linguaggio per buon accesso al disco
Beh, beneZeroUno ha scritto:ottimo...
funziona tranquillamente su ntfs
- masalapianta
- Iper Master
- Messaggi: 2775
- Iscritto il: lun 25 lug 2005, 0:00
- Nome Cognome: famoso porco
- Kernel: uname -r
- Desktop: awesome
- Distribuzione: Debian
- Località: Roma
- Contatta:
Re: scelta linguaggio per buon accesso al disco
perchè? inotify ha i suoi hook nel vfs, mica nei singoli fs (anche perchè non avrebbe senso, uno dei motivi per cui esiste il vfs è proprio centralizzare le funzionalità comuni a tutti i fs); quindi se i due fs che hai menzionato passano per il vfs, non ci son problemi ad usare inotify414N ha scritto: Se usa NTFS o FAT come filesystem non credo possa usare inotifywait...
- 414N
- Iper Master
- Messaggi: 2922
- Iscritto il: mer 13 feb 2008, 16:19
- Slackware: 15.0
- Kernel: 5.15.19
- Desktop: KDE5
- Località: Bulagna
- Contatta:
Re: scelta linguaggio per buon accesso al disco
Non l'ho mai usato e la 'i' iniziale m'ha tratto in inganno facendomi pensare agli inode, piuttosto che al vfs.masalapianta ha scritto:perchè? inotify ha i suoi hook nel vfs, mica nei singoli fs (anche perchè non avrebbe senso, uno dei motivi per cui esiste il vfs è proprio centralizzare le funzionalità comuni a tutti i fs); quindi se i due fs che hai menzionato passano per il vfs, non ci son problemi ad usare inotify414N ha scritto: Se usa NTFS o FAT come filesystem non credo possa usare inotifywait...
Si impara sempre qualcosa