2010-01-19 15 views
0

Je dois sauvegarder de très grandes quantités de données (> 500 Go) qui sont en train d'être transférées (800Mb/s) à partir d'un autre périphérique connecté à mon PC. La vitesse exclut l'utilisation d'une base de données, par ex. MySQl/ISAM et je suis à la recherche d'une bibliothèque rapide et légère qui se trouve au dessus de la librairie stdio 'C' (ie fopen/fclose/fwrite) qui me permettra d'écrire/lire un très gros fichier (jusqu'à un disque disponible -espace). En arrière-plan, le fichier volumineux peut être décomposé en fichiers plus petits, par ex. 1 Go et je veux que l'API prenne soin de ces détails.La bibliothèque Fast 'C' gère de manière tranparente les fichiers très volumineux

Les données arrivent au PC dans un format binaire compressé et aucun autre traitement n'est nécessaire avant de l'écrire sur le disque dur.

La bibliothèque doit fonctionner sous Windows et Linux.

+0

Pas vraiment une réponse appropriée, mais la première chose qui vient à l'esprit: 'nc -l | split'' –

Répondre

1

Si vous avez besoin d'un accès aléatoire aux données, jetez un œil aux fichiers mappés en mémoire.

Il vous permet de mapper un fichier (ou une section d'un fichier) de manière transparente, sans avoir à allouer explicitement les données de memeory et de lire. Cela fonctionne sur Windows/Linux (il y a un boost lib qui enveloppe les différences). Sur Windows, vous pouvez gérer les fichiers >> 4 Go sur un os 32 bits en utilisant plusieurs fenêtres dans le fichier.

edit: Désolé 800Mb/s !! Je ne connais aucun disque capable de faire face à ça. Vous devez regarder une série de disques SSD.
Il y avait autrefois des cartes de capture d'images qui utilisaient un lecteur attaché comme une simple série d'octets sans système de fichiers pour obtenir des écritures très rapides. Je ne sais pas si tu vas avoir besoin de quelque chose comme ça.

+0

800Mb/s est juste environ 80MB/s ce qui est très faisable avec des lecteurs de 10000 RPM. Les Raptors WD peuvent effectuer des écritures de 150 Mo/s (environ 1500 Mo/s) et un peu plus de 80 Mo/s en lecture/écriture. – slebetman

+0

l'accès aléatoire n'est pas nécessaire. C'est juste écrit séquentiellement des données reçues (en streaming) à la fin du fichier. Une fois le fichier créé, le post-traitement est effectué en utilisant des lectures séquentielles. –

0

Pour une vitesse ultime, je suggère que vous alliez très spécifique à la plate-forme.

L'objectif est de se rapprocher le plus possible de la connexion du périphérique d'entrée directement au disque dur. Une méthode consiste à écrire un pilote pour le périphérique d'entrée qui écrit directement sur le disque dur.

L'algorithme générique consiste à utiliser un très grand tampon d'octets circulaires ou à utiliser plusieurs tampons. Vous avez besoin d'espace supplémentaire pour compenser la différence de vitesse entre le périphérique d'entrée et le périphérique de sortie. à condition que le périphérique d'entrée soit non-stop.

Si vous pouvez mettre en pause le périphérique d'entrée, le problème devient plus facile.