2015-12-26 1 views
0

J'ai un gros fichier binaire, et il est sauvegardé sur un disque de partage NFS. Dans le cluster, je souhaite que plusieurs processus lisent simultanément ce gros fichier. Chaque processus obtient un pointeur de fichier, ouvre le gros fichier et lit à partir du pointeur fourni et lit une certaine taille d'octets.Plusieurs processus lisent simultanément une partie différente d'un gros fichier binaire

Comment puis-je concevoir ce projet? En ce qui me concerne, il est similaire à certaines bases de données de concurrence. Existe-t-il une bibliothèque légère ou des projets open-source liés à mon projet? J'utilise le langage C++.

Répondre

1

Vous ne savez pas s'il est utile d'utiliser une bibliothèque.

Vous pouvez utiliser des trucs de base. Ouvrir et vous repositionner dans le fichier, puis effectuez la lecture:

http://www.cplusplus.com/reference/fstream/ifstream/open/ http://www.cplusplus.com/reference/istream/istream/seekg/

ou

http://www.cplusplus.com/reference/cstdio/fopen/ http://www.cplusplus.com/reference/cstdio/fseek/

+0

Merci beaucoup! J'ai cette question parce que je ne suis pas sûr si la lecture sur de multiples processus est liée au verrouillage de fichier, etc. Je considère que le système est similaire aux requêtes http Web au serveur Web. Ainsi je pense que nous devrions concevoir un système comme le serveur Web, qui peut manipuler des accès de concurrence élevés. – mining

1

nicolae: Je suis d'accord :-)

minière: si loin vous n'avez rien dit au sujet d'un besoin d'interaction entre vos lecteurs.

Considérons un scénario simple. Disons que vous avez votre C++ programme appelé « doStuff » qui prend les arguments suivants:

--name  something to lable your output. 
--offset offset point, seek to here (default to zero). 
--bytes number of bytes to process. 
inputfile the file you want to read 

qui suit courrait vos deux processus en arrière-plan.

$ dostuff --name "proc1" --offset=0  --bytes=100 \\myserver\myshare\bigfile.dat & 
$ dostuff --name "proc2" --offset=100 --bytes=100 \\myserver\myshare\bigfile.dat & 

Vous pouvez ouvrir un handle de fichier dans chaque processus. Tant que l'accès aux données est en lecture seule, pourquoi voulez-vous le rendre plus complexe?

importante: Je ne dis pas qu'il ne devrait pas être plus complexe, je suggère que vous ne l'avez pas encore montré un besoin de complexité supplémentaire. Et cette complexité va venir d'un besoin pour vos lecteurs de collaborer. S'ils n'ont pas besoin de collaborer, alors vous avez presque terminé votre architecture - utilisez les liens fournis par Nicolae et bonne chance à vous.

+0

Merci! Il n'y a pas d'interaction entre les lecteurs. Tous les processus lisent leur propre partie en fonction du pointeur donné et de la taille à lire. J'ai cette question parce que je ne suis pas sûr si la lecture sur de multiples processus est liée le verrouillage de fichier, etc. – mining

+0

Je considère que le système est semblable aux demandes de HTTP Web au serveur Web. Ainsi, je pense que le système devrait être similaire à un serveur web, capable de gérer des accès en simultané. – mining