Quale meccanismo di blocco dovrebbe essere usato quando si persistono dati nei file

0

Sto iniziando a imparare come creare applicazioni web da un tutorial golang . Per semplicità, persiste i dati in file anziché in un database. Il codice completo crea un server in grado di gestire più richieste simultanee, ma il programma non sembra garantire che solo un utente stia interagendo con un file fisso alla volta.

Questo creerebbe problemi per le applicazioni del "mondo reale"? Un'architettura che usa i file per la persistenza crea problemi?

    
posta yberman 10.08.2015 - 15:22
fonte

1 risposta

2

Sui sistemi Linux e POSIX, è meglio bloccare il file utilizzando ad es. avviso blocco come flock (2) o lockf (3) (e se la tua applicazione è multithread, dovrai utilizzare in qualche modo -eg mutex - per assicurarti che solo al massimo un singolo thread sta accedendo al file). Potresti avere una lettura goroutine (singola e ben definita) su alcuni canali go per quella sincronizzazione.

Questo blocco di avviso garantisce che altri programmi e amp; i processi che seguono la stessa convenzione di blocco non accederanno simultaneamente al tuo file (ma non impediranno ad alcuni programmi che non usano il blocco di accedervi o scriverlo).

Se si utilizza un database, il DBMS spesso garantisce ACID proprietà.

Alcune librerie (come sqlite , GDBM , ....) potrebbe avere anche un modo per bloccare i file.

Certamente dovresti preoccuparti di non avere più thread o processi che scrivono lo stesso file contemporaneamente. Questa sarebbe una condizione di razza , e tali bug sono difficili da riprodurre e difficili da trovare (leggi su heisenbugs ).

    
risposta data 10.08.2015 - 15:24
fonte

Leggi altre domande sui tag