Quelles tailles de bloc pour des millions de petits fichiers

10

J'ai 2 disques de 4 To en RAID1 matériel (ce pourrait être un LSI MegaRaid) sur Debian Wheezy. La taille du bloc physique est de 4 Ko. Je vais stocker 150 à 200 millions de petits fichiers (entre 3 et 10 Ko). Je ne demande pas les performances, mais les meilleures tailles de système de fichiers et de blocs pour économiser le stockage. J'ai copié un fichier de 8200 octets sur un ext4 avec une taille de bloc de 4 Ko. Cela a pris 32 Ko de disque!? La journalisation en est-elle la raison? Alors, quelles sont les options pour économiser le plus de stockage pour de si petits fichiers?

rabudde
la source

Réponses:

1

Si j'étais dans cette situation, j'examinerais une base de données qui peut stocker toutes les données dans un seul fichier avec un index compact basé sur l'offset, plutôt que sous forme de fichiers séparés. Peut-être une base de données qui dispose d'un pilote FUSE disponible pour interagir avec lui en tant que fichiers lorsque cela est nécessaire, sans qu'ils soient en fait tous des fichiers distincts.

Alternativement, vous pouvez regarder, disons, le 60e - 70e centile des tailles de fichiers et essayer d'ajuster cette taille de fichier directement dans les nœuds de l'arborescence du système de fichiers, plutôt que comme des blocs séparés sur le disque. Stocker 10k dans chaque nœud est probablement une grande question, mais si vous pouviez y trouver 60% à 70% de fichiers, ce serait probablement une énorme victoire.

Seuls certains systèmes de fichiers peuvent le faire (reiserfs en est un), et je suppose que tout dépend de la taille de ce centile, de sa compatibilité avec l'arborescence. Vous pourrez peut-être le régler. J'imagine que j'essaie de ranger le reste en un seul bloc.

Et ne vous inquiétez pas des revues; ils ont de toute façon une limite de taille supérieure.


la source
4
Non non non non non non non non juste ... non à votre 1er paragraphe. J'ai fait cette erreur il y a des années et elle a dû être annulée plus tard. J'ai également hérité de systèmes qui utilisent ce modèle de conception. Les fichiers appartiennent au système de fichiers ou, à titre de compromis, à un objet FileStream de SQL Server si vous devez les combiner (alors peut-être votre pilote FUSE, mais toujours pas). Il y a d'autres considérations lorsque vous travaillez dans le système de fichiers, comme ne mettez pas 4 millions de fichiers dans un dossier (j'ai également fait cette erreur).
Mark Henderson
2
@MarkHenderson mais le problème est de définir ce qui DEVRAIT être un fichier et ce qui devrait être un enregistrement. Sans que plus de détails n'aient été fournis, des centaines de millions de petites choses ressemblent BEAUCOUP plus à des enregistrements. Tout simplement parce qu'il les a actuellement sous forme de fichiers, cela ne signifie pas qu'ils doivent rester de cette façon, ou auraient jamais dû être de cette façon. De plus, je n'ai jamais suggéré d'utiliser SQL Server pour le travail une seconde;)
2
Il y a 5 ans, j'ai hérité d'un système avec 1 million de fichiers dans un seul dossier et environ 10 000 nouveaux fichiers de 1 à 4 Ko par jour. J'ai décidé de les jeter tous dans une table ISAM parce que "Hé, ce sont juste du texte brut à analyser!" puis cela s'est avéré être une énorme erreur car j'avais maintenant une seule table de 12 Go avec un milliard de lignes qui ne faisaient pratiquement rien après leur traitement. J'ai donc recommencé à les mettre dans un système de fichiers avec des dossiers héritiers basés sur le GUID du nom de fichier.
Mark Henderson
(pourquoi une seule table de 12 Go avec des rangées de squllions était un problème était une question différente que je n'entrerai pas ici)
Mark Henderson
2
@MarkHenderson: Ce n'est pas un problème différent, c'est POURQUOI vous avez dit que ce n'était pas la bonne solution ("... énorme erreur parce que j'avais maintenant une seule table de 12 Go avec un millier de lignes ...."). Vous choisissez le mauvais moteur de base de données / format de table, mais le concept de mettre beaucoup de petites choses dans un seul fichier avec un INDEX est bon, tant que vous le faites correctement. Ce que vous voulez, c'est une base de données qui excelle dans les magasins de clés / valeurs pour des millions de petits objets, avec un partitionnement automatique. Notez également qu'il ne se soucie même pas de la performance, juste de l'espace.