Domanda

Nel mio programma, tengo due file aprire per la scrittura, un contenuto di file, che contiene blocchi di dati, e di un file di indice, che contiene una mappa su cui blocchi di dati sono stati scritti finora.

vorrei entrambi irrigare a disco, come performante possibile, con l'unico vincolo che i blocchi nel file di dati devono essere scritti prima dei corrispondenti blocchi nella mappa file (naturalmente).

Il problema è che vorrei evitare il blocco OSSIA facendo un fsync, sia per la latenza e throughput motivi.

Tutte le idee?

È stato utile?

Soluzione

Non credo che si può fare facilmente in un unico percorso di esecuzione. È necessario Fsync avere la scrittura su disco garantito - e questo sta andando ad avere per attendere che la scrittura.

ho il sospetto che è possibile (ma non facile) per fare questo, delegando il compito di scrittura ad una discussione o un processo separato. Generare i dati nel programma esistente e 'write' al secondo thread / processo utilizzando qualsiasi metodo che sembra ragionevole. Questo può essere non bloccante. Il secondo filo sarebbe quindi scrivere i nuovi dati ai dati al contenuto del file, quindi fsync, quindi scrivere l'index-file, quindi controllare per i nuovi dati di nuovo. decisioni di progettazione chiave si riferiscono a come separare i due percorsi di esecuzione, come si comunica tra di loro, e se avete bisogno di riferire sul retro scrittura al programma principale. Ciò potrebbe avere ancora la latenza e la velocità problemi, ma che parte del costo della scelta di avere l'indice di file e contenuti file in sincronia di. Almeno ci sarebbe una possibilità di ottenere il lavoro fatto durante l'attesa sul disco.

Potrebbe valere la pena guardare per vedere se questo è ben incapsulato in modo da essere utile a voi nella sorgente di uno dei database transazionali. Si potrebbe anche studiare l'opzione di sincronizzazione quando si monta il file system per il contenuto-file.

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