Stockage de millions de systèmes de fichiers image
J'ai un projet qui générera un grand nombre d'images. Près 1000000 commencer. Ce sont de petites images, donc je les stockerai tout sur une seule machine au démarrage.
Comment recommandez-vous de stocker efficacement ces images? (Système de fichiers NTFS actuellement)
Je considère le schéma de dénomination ... Pour commencer, toutes les images auront un nom incrémentiel de 1 Avant d'espérer que cela m'aidera plus tard les trier si vous avez besoin et les jeter dans différents dossiers.
Quel schéma de dénomination sera meilleur:
a/b/c/0 ... z/z/z/999
ou
a/b/c/000 ... z/z/z/999
Avoir des idées à ce sujet?
Comment recommandez-vous de stocker efficacement ces images? (Système de fichiers NTFS actuellement)
Je considère le schéma de dénomination ... Pour commencer, toutes les images auront un nom incrémentiel de 1 Avant d'espérer que cela m'aidera plus tard les trier si vous avez besoin et les jeter dans différents dossiers.
Quel schéma de dénomination sera meilleur:
a/b/c/0 ... z/z/z/999
ou
a/b/c/000 ... z/z/z/999
Avoir des idées à ce sujet?
Aucun résultat connexe trouvé
Invité:
Pour répondre aux questions, connectez-vous ou registre
24 réponses
Catherine
Confirmation de:
Ne sauvegardez pas le chemin effectif à la base de données. Il est préférable de sauvegarder le numéro de séquence de l'image dans la base de données et d'avoir une fonction pouvant générer un chemin à partir du numéro de séquence. par exemple:
Il est plus facile de faire face à cela si vous avez besoin de changer de structure de répertoire. Vous devrez peut-être déplacer des images vers un autre endroit, vous avez peut-être été terminée et vous commencez à stocker des images sur le disque. A, et certaines - Sur disque B etc. D. Plus facile à changer une fonction que de modifier les chemins de la base de données .
J'utiliserais un tel algorithme pour créer des répertoires:
Entrez d'abord le numéro de séquence avec les zéros de premier plan jusqu'à ce que vous receviez au moins une chaîne à 12 chiffres. Ceci est le nom de votre fichier. Vous pouvez ajouter suffixe:
->
Puis divisez la chaîne en blocs de 2 ou 3 Symboles, où chaque bloc indique le niveau du répertoire. Avoir un nombre fixe de niveaux de répertoire (par exemple, 3):
->
Enregistrez le fichier dans le répertoire généré:
Ainsi, le chemin complet et le nom de fichier pour le fichier avec l'identifiant de séquence
est un
Pour un fichier avec un identifiant de séquence
Chemin sera
Certaines choses à prendre en compte par rapport aux structures de répertoires et au référentiel de fichiers:
L'algorithme susmentionné vous donne un système dans lequel chaque répertoire final a un maximum 1000 Des dossiers (Si vous avez moins 1000000000000 Des dossiers).
Il peut y avoir des restrictions sur le nombre de fichiers et de sous-répertoires que le répertoire peut contenir, par exemple
http://en.wikipedia.org/wiki/Ext3
a une limite de B. 31998 sous-répertoires sur un répertoire.
Outils ordinaires (WinZip, Windows Explorer, Ligne de commande, coquille bash etc.) Ne peut pas très bien fonctionner si vous avez un grand nombre de fichiers dans le catalogue (> 1000).
La structure de répertoire elle-même prendra une place sur le disque. Vous n'avez donc pas besoin de trop de répertoires.
Avec la structure ci-dessus, vous pouvez toujours trouver le bon chemin vers le fichier image, en regardant simplement le nom du fichier si vous avez accidentellement gâché la structure de répertoire.
Si vous devez accéder aux fichiers de plusieurs machines, envisagez de partager des fichiers via un système de fichiers réseau.
L'état des répertoires ci-dessus ne fonctionnera pas si vous supprimez de nombreux fichiers. Il laisse des "trous" dans la structure de répertoire. Mais puisque vous ne supprimez pas de fichiers, tout devrait être en ordre.
Dominique
Confirmation de:
Je travaille avec des bases de données de stockage de données pendant de nombreuses années: grande (1 mégaoctet -> 1 Gigaoctet.) Fichiers, changeant fréquemment, plusieurs versions du fichier, l'accès auquel est souvent effectuée assez souvent. Des problèmes de base de données avec lesquels vous rencontrez lors de la conservation de fichiers volumineux sont extrêmement fastidieux, l'enregistrement et les problèmes de transaction sont déroutants et vous êtes rencontré avec des problèmes de blocage pouvant causer des accidents de train graves. J'ai plus de pratiques dans les scénarios d'écriture dbcc et restauration des tables des sauvegardes que de toute personne normale serait.
Déjà
ont.
La plupart des nouveaux systèmes avec lesquels j'ai travaillé, ont transféré le stockage de fichiers vers le système de fichiers et comptez sur des bases de données pour plus d'indexation. Les systèmes de fichiers sont conçus pour ce type d'abus, ils sont beaucoup plus faciles à développer et vous perdez rarement tout le système de fichiers si une entrée est endommagée.
Christine
Confirmation de:
Supposons que vous ayez un fichier hash qui ressemble à ceci
Vous pouvez le stocker dans le lieu suivant et utiliser autant de niveaux que nécessaire pour que le nombre de fichiers dans chaque dossier soit faible.
J'ai vu cette approche a été appliquée plusieurs fois. Vous avez toujours besoin d'une base de données pour correspondre à ces fichiers de hachage avec un nom de personne claire et d'autres métadonnées dont vous avez besoin pour enregistrer. Mais cette approche est bien mise à l'échelle, comme vous pouvez commencer à distribuer l'espace d'adressage de hachage entre plusieurs ordinateurs et / ou des pools de stockage, etc.
Dominique
Confirmation de:
En supposant que vous avez le contrôle des noms de fichiers, je les partageais au niveau 1000 secondes sur le catalogue. Plus vous ajoutez de niveaux de répertoire, plus inodes Vous écrivez, donc il y a push-pull.
Par exemple.,
/ racine / [0-99] / [0-99] / Nom de fichier
La note,
(WS.10).aspx[/url]
Il y a des informations de configuration plus détaillées. NTFS. En particulier, "si vous utilisez un grand nombre de fichiers dans le dossier NTFS (300 000 ou plus), Désactivez la génération de noms de fichiers courts pour améliorer les performances, en particulier si les six premiers caractères des noms de fichiers longs sont similaires. "
Vous devez également explorer la possibilité de désactiver les fonctions du système de fichiers dont vous n'avez pas besoin. (Par exemple, le dernier temps d'accès).
http://www.pctools.com/guides/registry/detail/50/
Babette
Confirmation de:
En fonction de la distribution des noms de ces images, vous pouvez créer une structure de répertoire dans laquelle vous aurez des dossiers de haut niveau avec une lettre, où vous aurez un autre ensemble de sous-dossiers pour la deuxième lettre d'images, etc.
Alors:
Dossier
contiendra des images commençant par 'abcdefg' etc.
Vous pouvez entrer votre profondeur souhaitée.
La chose la plus remarquable dans cette décision est que la structure de répertoire agit efficacement comme une table de hachage / dictionnaire. Connaître le nom du fichier image, vous connaîtrez son répertoire et envisager le répertoire, vous connaîtrez le sous-ensemble des images qui y vont.
Agathe
Confirmation de:
Ce schéma fonctionne très bien avec l'index d'identification de la base de données, car elle remplit uniformément toute la structure des répertoires.
Hannah
Confirmation de:
http://technet.microsoft.com/e ... .aspx
Catherine
Confirmation de:
De plus, si vous choisissez le système de fichiers, vous devrez diviser ces fichiers vers des répertoires. J'ai étudié ce problème et j'ai suggéré une solution, mais ce n'est en aucun cas parfait. Je divise les sections sur la table de hachage et les utilisateurs, vous pouvez en apprendre davantage sur mon
http://blinkered.ca/blog/2009/ ... stem/
.
Dominique
Confirmation de:
Le processus peut-il générer ces images créer le même nom de fichier plus d'une fois? Il est difficile de dire, ne sachant pas quel appareil crée le nom du fichier, mais de dire que le périphérique est "redémarré" et après le redémarrage, il commence à nommer l'image, comme c'était la dernière fois qu'il était "réinitialisé" - Si c'est un tel problème ..
De plus, vous dites que vous obtiendrez 1 Millions d'images pour le mois. Que dis-tu de ça?
À quelle vitesse ces images vont-elles continuer à remplir le système de fichiers?
À un moment donné, ils vont se terminer et quitter 1 Millions toutes les images ou
Continuera-t-il à grandir et à développer un mois pour le mois?
Je vous demande, car vous pouvez commencer à concevoir votre système de fichiers pendant des mois, puis sur les images. Je pourrais vous suggérer de stocker des images dans une telle structure de répertoire:
Mois, année et jours pair conviennent aux images de type image. Je ne suis pas sûr que c'est ce que vous faites, mais je l'ai fait avec une chambre de sécurité à domicile qui enleva la photo tous les 10 Secondes ... Ainsi, votre application peut passer à une certaine heure ou même à la plage dans laquelle vous pourriez penser que l'image a été générée. . Ou au lieu de l'année - Existe-t-il une autre "valeur" qui peut être apprise du fichier image lui-même? Quelques autres descripteurs sauf la date donnée par moi?
Je ne stockerais pas les données binaires dans la base de données. Jamais eu de bon travail / Bonne chance avec de telles choses. Je ne peux pas imaginer que ça marche bien avec 1 Millions de dollars. Je sauverais le nom du fichier et c'est tout. Si tous seront au format JPG, Ne gardez même pas l'extension. Je créerais un tableau de gestion dans lequel le pointeur serait stocké sur le serveur, le disque, le chemin du fichier, etc. Ainsi, vous pouvez ainsi déplacer ces images dans un autre champ et les trouver toujours.
Avez-vous besoin de marquer des images avec des mots-clés?
Si tel est le cas, vous devez créer des tables appropriées permettant une telle marque.
Tu / d'autres ont peut-être discuté de ces idées pendant que j'ai répondu .. J'espère que cela aidera ..
Catherine
Confirmation de:
Hannah
Confirmation de:
Ma décision basée sur une telle utilisation était l'archivage progressif des images dans des fichiers compressés. Les images sont présentées au format JPG, Chacun environ 20 KB et pas fortement compressé, donc le schéma de compression ZIP absent. Ceci est fait simplement pour les combiner dans un enregistrement de système de fichiers, ce qui aide grandement NTFS Du point de vue de la vitesse lorsqu'il s'agit de leur déplacement du disque sur le disque ou de visualiser la liste des fichiers.
Les images plus anciennes que la journée sont combinées dans "quotidiennes" zip; Les index postaux plus vieux que le mois sont combinés dans le "Mensuel" Codes postaux; Et enfin, tout cela plus d'un an n'est plus nécessaire et, par conséquent, est supprimé.
Ce système fonctionne bien car les utilisateurs peuvent voir les fichiers (soit par le biais du système d'exploitation, soit par un certain nombre d'applications clientes), Et tous les noms sont nommés en fonction des noms des périphériques et des balises temporaires. Habituellement, l'utilisateur connaît ces deux parties de l'information et peut rapidement trouver les millions d'images.
Je comprends que cela n'est probablement pas lié à vos détails spécifiques, mais je pensais que je partagerais.
Giselle
Confirmation de:
Agathe
Confirmation de:
Cela conduira au fait que le chemin sera:
Ensuite, vous pouvez trouver
Dans la structure de répertoire en jouant de l'algorithme.
Utilisation HEX En tant que nom du directeur Noms, comment convertir
Valeurs:
Par conséquent:
J'ai écrit cet article il y a quelques années et je l'ai récemment déplacé à Medium. Il a quelques détails de plus et de l'exemple de code:
https://medium.com/%40michael. ... a4091
. J'espère que cela aidera!
Dominique
Confirmation de:
Éviter les bases de données relationnelles à tout prix; Bien que les bases de données, sans doute, ne soient pas en mesure de gérer des données, elles ne sont pas destinées à une telle utilisation. (Nous avons des bases de données hiérarchiques spécialisées pour savoir ce qu'on appelle
Systèmes de fichiers
). Bien que je n'ai que je n'ai que deviné, je suis prêt à affirmer que la base de données Kesh volera hors de la fenêtre si vous le quittez vraiment de gros gouttes. Bien que mon équipement abordable soit petit, sans toucher la base de données lorsque vous recherchez des images, la vitesse était des commandes ci-dessus.
Examiner comment le système de fichiers se comporte; sur ext3 (ou alors c'était ext2 - je me rappelle plus) La limite de la recherche efficace des sous-répertoires et des fichiers était à propos de 256; Donc, dans n'importe quel dossier, il n'y a qu'un tel nombre de fichiers et de dossiers. Encore une fois, une accélération notable. Bien que je ne connaisse rien de NTFS, de telles choses que XFS (qui, autant que je me souvienne, utilisez des arbres B), Travaillez très rapidement simplement parce qu'ils peuvent effectuer la recherche très rapidement.
Distribuer uniformément les données; Quand j'ai expérimenté ce qui précède, j'ai essayé de distribuer uniformément des données sur tous les catalogues. (j'ai fait MD5 URL et l'utiliser pour les annuaires;
). Ainsi, la réalisation de toute limite de performance installée prend plus de temps (et le système de fichiers cache dans tous les cas est vide pour de tels ensembles de données volumineux). (Au contraire, vous voudrez peut-être voir où sont les restrictions au stade précoce; Ensuite, vous voulez tout jeter dans le premier répertoire disponible.
Giselle
Confirmation de:
Certaines des solutions proposées ici conduisent à une distorsion du nom de fichier. (Par exemple, si le fichier physique a été déplacé, vous perdrez l'idée que ce fichier est réellement). Je recommande d'enregistrer un nom de fichier physique unique à, si votre liste principale des fichiers est endommagée, vous pouvez le restaurer avec une petite coquille, euh, powershell, scénario;)
De ce que j'ai lu ici, il semble que tous ces fichiers soient stockés dans un système de fichiers. Envisagez de les stocker dans plusieurs systèmes de fichiers sur plusieurs machines. Si vous avez des ressources, déterminez le système de stockage de chaque fichier sur deux machines différentes au cas où vous perdrez l'alimentation électrique et le remplacement prendra 2 journée.
Pensez quelles procédures vous devez créer pour transférer des fichiers entre machines ou systèmes de fichiers. La possibilité de le faire avec votre système en temps réel et en ligne peut vous éviter d'un mal de tête important à l'avenir.
Vous pouvez envisager d'utiliser GUID Comme nom de fichier physique au lieu d'un nombre incrémentiel au cas où votre compteur de nombres incrémentiels (Colonne d'identifiant de base de données?) Gâté.
Si nécessaire, envisagez d'utiliser CDN, par exemple Amazon S3.
Hannah
Confirmation de:
Chaque jour, plusieurs images sont générées:
Couple par mois:
etc. Me comprenez-vous ... =)
Giselle
Confirmation de:
Vous pouvez être intéressé par la spécification suivante, la plupart des caméras numériques le suivent pour gérer le référentiel de fichiers:
https://en.wikipedia.org/wiki/ ... ormat
En fait, un dossier est créé, par exemple
et les photos sont ajoutées à ce dossier. (par exemple,
). Quand le compteur de nom de fichier atteint
Un nouveau dossier est créé (
) et l'image est à nouveau ajoutée, le compteur est réinitialisé, éventuellement avec un autre préfixe (par exemple:
).
Vous pouvez également créer des dossiers basés sur une partie du nom du fichier. (déjà mentionné plusieurs fois). Par exemple, si votre photo est appelée
, conservation
. Il est plus difficile à mettre en œuvre, mais il simplifiera la recherche de fichiers.
Selon le système de fichiers (Cela nécessitera des recherches.), Vous pouvez simplement décharger toutes les images dans un dossier, mais, dans mon expérience, cela provoque généralement des problèmes de performance.
Christine
Confirmation de:
Cependant, compter la liste des fichiers (par find) occupé 68 les heures.
J'ai également passé le test en plaçant de nombreux fichiers dans un seul répertoire. Avant que je m'arrête, j'en avais sur 3,7 Millions de fichiers dans le même répertoire. La sortie du catalogue pour le comptage a pris environ 5 minutes. La suppression de tous les fichiers de ce catalogue a pris 20 les heures. Mais la recherche et l'accès à tout fichier étaient instantanés.
Babette
Confirmation de:
Il pourrait vous éviter de stocker et de sauver des images chaudes au service de la mémoire?
Blanche
Confirmation de:
http://msdn.microsoft.com/en-u ... .aspx
Il a été conçu en tenant compte du stockage des fichiers multimédias et est disponible maintenant.
Babette
Confirmation de:
par exemple
>
>
[code]public string GeneratePath(long val)
{
string hex = val.ToString("X");
hex=hex.PadLeft(10, '0');
string path="";
for(int i=0; i<hex.length; )="" +="hex.Substring(i,2);" ;="" <="" [="" [code]public="" [url]https:="" acrobit="" acrofs[="" code]="" codes="" complets:="" div="" doc)="" et="" fullpath="GeneratePath(newId)" github.com="" i+="2" id)="" if(i+2<hex.length)="" into="" load(long="" long="" newid="getNewId();" newid;="" path="" path+="/" path;="" public="" return="" source="" stocker="" store="" store(stream="" stream="..." stream;="" télécharger:="" url]="" var="" {="" }="">
<div class="answer_text">
Vous voudrez peut-être regarder ZFS (Système de fichiers, TOM Manager de Sun) avec respect
</div>
<div class="answer_text">
Malheureusement, les systèmes de fichiers sont très mauvais (Performances avec de nombreux fichiers dans le répertoire ou des arbres de catalogue profonds, vérifiez l'heure lors du redémarrage, de la fiabilité) Lors de la gestion d'un grand nombre de petits fichiers, la solution est plus élevée, qui comprend des fichiers ZIP, Mieux si vous souhaitez utiliser le système de fichiers.
Utilisation du gestionnaire de base de données - Bien sûr, la meilleure option; Simple, par exemple, BDB ou GDBM; Même les SGBL relatifs comme MySQL Serait mieux. Seules les paresseux qui ne comprennent pas les systèmes de fichiers et les bases de données (Par exemple, ceux qui rejettent les transactions), Dire utiliser les systèmes de fichiers en tant que bases de données (ou un peu moins souvent, au contraire).
</div>
<div class="answer_text">
Qu'en est-il de la base de données avec une table contenant un identifiant et un grand objet de stockage d'images binaires? Ensuite, vous pouvez ajouter une nouvelle table. (s), Lorsque vous souhaitez associer plus d'éléments de données avec une photo.
Si vous vous attendez à la mise à l'échelle, pourquoi ne pas l'échouer maintenant? Vous gagnerez du temps comme maintenant, et plus tard, imo. Mettre en œuvre le niveau de la base de données une fois, qui est assez facile à démarrer. Ou implémenter quelque chose avec des dossiers et des noms de fichiers et de bla bla, puis passez à autre chose lorsque vous commencez à souffler MAX_PATH.
</div>
</hex.length;>
Emilie
Confirmation de:
Babette
Confirmation de:
Utilisation du gestionnaire de base de données - Bien sûr, la meilleure option; Simple, par exemple, BDB ou GDBM; Même les SGBL relatifs comme MySQL Serait mieux. Seules les paresseux qui ne comprennent pas les systèmes de fichiers et les bases de données (Par exemple, ceux qui rejettent les transactions), Dire utiliser les systèmes de fichiers en tant que bases de données (ou un peu moins souvent, au contraire).
Christine
Confirmation de:
Si vous vous attendez à la mise à l'échelle, pourquoi ne pas l'échouer maintenant? Vous gagnerez du temps comme maintenant, et plus tard, imo. Mettre en œuvre le niveau de la base de données une fois, qui est assez facile à démarrer. Ou implémenter quelque chose avec des dossiers et des noms de fichiers et de bla bla, puis passez à autre chose lorsque vous commencez à souffler MAX_PATH.