2009-07-13 9 views
0

Je travaille sur le développement d'une application qui effectuera une sauvegarde en ligne des fichiers et dossiers dans le PC, automatiquement ou manuellement. Actuellement, je ne gardais que la dernière version du fichier sur le serveur. Maintenant, je dois implémenter le versioning de sorte que seuls les changements peuvent être transférés sur le serveur en ligne et l'utilisateur doit être capable de télécharger n'importe quelle version disponible du fichier sur le serveur de sauvegarde.besoin d'implémenter le versioning dans l'outil de sauvegarde en ligne

Je dois effectuer une déduplication pour cela. Les gars, bien que je suis capable de l'exécuter en utilisant la taille de bloc fixe, mais face à une surcharge de transférer le fichier ayant des informations de CRC avec chaque sauvegarde de version.

Je n'ai jamais travaillé sur une telle technologie, donc manque d'expérience. Je suis impatient de savoir s'il existe une méthode réalisable pour intégrer cette fonctionnalité dans l'application sans trop de douleur. Est-ce qu'un outil tiers aiderait à faire la même chose? S'il vous plaît, faites-moi savoir?

Remarque: J'utilise le protocole FTP pour transférer les données.

Répondre

1

Il existe un programme appelé dump qui fait quelque chose de similaire, mais il fonctionne sur les blocs de système de fichiers plutôt que sur les fichiers. rsync peut également être d'intérêt. Vous aurez besoin de garder trace d'un grand nombre de blocs avec plusieurs versions et comment ils s'intègrent dans les différentes versions des fichiers originaux, de sorte que vous aurez besoin d'une base de données pour suivre ces informations, et un moyen efficace de interrogez-le pour déterminer quels blocs dans un fichier donné doivent être transférés. Notez également que l'ajout de quelque chose au début d'un fichier entraînera la "nouveauté" de tous vos blocs si vous utilisez un schéma de blocage et de comparaison naïf.

Pour bien faire cela sera très complexe. Je vous recommande fortement de faire des recherches approfondies sur les solutions déjà disponibles, et si vous décidez que vous avez besoin d'écrire les vôtres, examinez attentivement les avantages de leurs conceptions.

+0

Oui, je fais des recherches depuis la semaine dernière. Qu'est-ce que j'ai trouvé une solution où, je suis en bloc compte tenu du fichier et pour chaque version j'ai une structure_string (pour garder une trace de la disponibilité des blocs, de sorte qu'ils peuvent être atteints des versions précédentes) + une liste compilée de CRC de chaque bloc, de sorte que cette liste peut être téléchargée et comparée avec la liste de la version actuelle pour découvrir la différence. Je dois confirmer que mon approche est correcte et comment ils sont implémentés dans le monde réel? – Sumeet

+0

Je suis sûr que ça peut marcher, mais ce n'est pas idéal. Comme je l'ai dit, certains types de changements vous obligeront à transférer le fichier entier (qui pourrait être GB) pour un changement d'un octet. Selon la taille du bloc, cela peut être des milliers ou des millions de blocs en double (chacun un fichier?) Sur votre serveur, ce qui rendra les listes de répertoires inutilement lentes. Je voudrais regarder le "delta encoding" lien sur la page rsync. Cela vous permet d'envoyer uniquement les parties du fichier qui ont réellement changé. Beaucoup de travail a été fait pour rendre cela efficace. Le code de dump et rsync est disponible pour regarder aussi bien. –

+0

J'ai commencé à travailler sur le code Rsync. Qu'est-ce que tu penses? cela serait-il utile? – Sumeet

Questions connexes