Repository 32bit  Forum
Repository 64bit  Wiki

scelta linguaggio per buon accesso al disco

Forum dedicato alla programmazione.

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.

scelta linguaggio per buon accesso al disco

Messaggioda ZeroUno » mer set 29, 2010 9:30

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
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4297
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: scelta linguaggio per buon accesso al disco

Messaggioda 414N » mer set 29, 2010 12:26

E se usassi un sistema VCS, tipo svn, git ecc?
Hanno già le caratteristiche che richiedi (log modifiche, md5/checksum dei file ecc.).
Avatar utente
414N
Iper Master
Iper Master
 
Messaggi: 2877
Iscritto il: mer feb 13, 2008 16:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

Re: scelta linguaggio per buon accesso al disco

Messaggioda kreen » mer set 29, 2010 12:51

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.
Avatar utente
kreen
Linux 2.4
Linux 2.4
 
Messaggi: 228
Iscritto il: mer feb 01, 2006 18:32
Località: Verona
Slackware: 12.0
Kernel: 2.6.21.5-smp
Desktop: KDE

Re: scelta linguaggio per buon accesso al disco

Messaggioda masalapianta » mer set 29, 2010 15:52

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
Avatar utente
masalapianta
Iper Master
Iper Master
 
Messaggi: 2775
Iscritto il: dom lug 24, 2005 23:00
Località: Roma
Nome Cognome: famoso porco
Kernel: uname -r
Desktop: awesome
Distribuzione: Debian

Re: scelta linguaggio per buon accesso al disco

Messaggioda ZeroUno » mer set 29, 2010 16:58

E se usassi un sistema VCS, tipo svn, git ecc?
Hanno già le caratteristiche che richiedi (log modifiche, md5/checksum dei file ecc.).

Adoro git, ma
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"

in cui $FORMAT è l'elenco di _tutti_ i parametri accettati da find -printf (che potete vedere dal man find)
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

dimensione lista: 16M la prima e 18M la seconda; sono salvate in due file.
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4297
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: scelta linguaggio per buon accesso al disco

Messaggioda 414N » mer set 29, 2010 17:07

ZeroUno ha scritto:
E se usassi un sistema VCS, tipo svn, git ecc?
Hanno già le caratteristiche che richiedi (log modifiche, md5/checksum dei file ecc.).

Adoro git, ma
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

come non detto :)

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

Dovresti usare l'opzione -b di md5sum per file binari (non testuali).
Avatar utente
414N
Iper Master
Iper Master
 
Messaggi: 2877
Iscritto il: mer feb 13, 2008 16:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

Re: scelta linguaggio per buon accesso al disco

Messaggioda ZeroUno » mer set 29, 2010 18:28

414N ha scritto:Dovresti usare l'opzione -b di md5sum per file binari (non testuali).

che differenza c'è?

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
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4297
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: scelta linguaggio per buon accesso al disco

Messaggioda 414N » mer set 29, 2010 18:43

ZeroUno ha scritto:
414N ha scritto:Dovresti usare l'opzione -b di md5sum per file binari (non testuali).

che differenza c'è?

con -b ci sta mettendo metà del tempo.

non ha finito ma ha fatto 10000 in 5 minuti

Calcola il MD5 in modalità binaria, non testuale (che è il default). Almeno, così è scritto nella man page.
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.

Come calcoli sottostanti non so cosa cambi, però...
Avatar utente
414N
Iper Master
Iper Master
 
Messaggi: 2877
Iscritto il: mer feb 13, 2008 16:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

Re: scelta linguaggio per buon accesso al disco

Messaggioda ZeroUno » gio set 30, 2010 0:00

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
Codice: Seleziona tutto
      for (i = 0; i < bytes_read; i++)
        s += buf[i];

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
Packages finder: slakfinder.org | Slackpkg+, per aggiungere repository a slackpkg
Codice: Seleziona tutto
1011010 1100101 1110010 1101111 - 0100000 - 1010101 1101110 1101111
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4297
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: scelta linguaggio per buon accesso al disco

Messaggioda masalapianta » gio set 30, 2010 11:10

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 &

poi fai come preferisci
Avatar utente
masalapianta
Iper Master
Iper Master
 
Messaggi: 2775
Iscritto il: dom lug 24, 2005 23:00
Località: Roma
Nome Cognome: famoso porco
Kernel: uname -r
Desktop: awesome
Distribuzione: Debian

Re: scelta linguaggio per buon accesso al disco

Messaggioda 414N » gio set 30, 2010 11:37

masalapianta ha scritto:
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 &

poi fai come preferisci

Se usa NTFS o FAT come filesystem non credo possa usare inotifywait...
Avatar utente
414N
Iper Master
Iper Master
 
Messaggi: 2877
Iscritto il: mer feb 13, 2008 16:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

Re: scelta linguaggio per buon accesso al disco

Messaggioda ZeroUno » gio set 30, 2010 16:25

ottimo...
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
Avatar utente
ZeroUno
Staff
Staff
 
Messaggi: 4297
Iscritto il: ven giu 02, 2006 13:52
Località: Roma / Castelli
Nome Cognome: Matteo Rossini
Slackware: current
Kernel: slack-current
Desktop: ktown-latest
Distribuzione: 01000000-current

Re: scelta linguaggio per buon accesso al disco

Messaggioda 414N » gio set 30, 2010 16:30

ZeroUno ha scritto:ottimo...
funziona tranquillamente su ntfs

Beh, bene :)
Avatar utente
414N
Iper Master
Iper Master
 
Messaggi: 2877
Iscritto il: mer feb 13, 2008 16:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE

Re: scelta linguaggio per buon accesso al disco

Messaggioda masalapianta » gio set 30, 2010 21:13

414N ha scritto:Se usa NTFS o FAT come filesystem non credo possa usare inotifywait...

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 inotify
Avatar utente
masalapianta
Iper Master
Iper Master
 
Messaggi: 2775
Iscritto il: dom lug 24, 2005 23:00
Località: Roma
Nome Cognome: famoso porco
Kernel: uname -r
Desktop: awesome
Distribuzione: Debian

Re: scelta linguaggio per buon accesso al disco

Messaggioda 414N » gio set 30, 2010 21:19

masalapianta ha scritto:
414N ha scritto:Se usa NTFS o FAT come filesystem non credo possa usare inotifywait...

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 inotify

Non l'ho mai usato e la 'i' iniziale m'ha tratto in inganno facendomi pensare agli inode, piuttosto che al vfs.
Si impara sempre qualcosa :)
Avatar utente
414N
Iper Master
Iper Master
 
Messaggi: 2877
Iscritto il: mer feb 13, 2008 16:19
Località: Bulagna
Slackware: 14.0 (x64)
Kernel: 3.2.29
Desktop: LXDE


Torna a Programmazione

Chi c’è in linea

Visitano il forum: Nessuno e 1 ospite