Quoi de mieux / plus rapide? MySql ou FileSystem?

9

Imaginons un site Web qui est un répertoire de personnes. Pour chaque personne, il peut y avoir une photo de profil et une biographie.

J'admets que mes requêtes SQL pourraient être meilleures, mais en général, ce serait plus rapide et utiliserait moins de puissance de traitement.

Pour vérifier si un fichier existe puis l'ouvrir ou

vérifiez avec MySql pour voir si une bio existe et affichez-la.

Je suis presque sûr que dans le cas ci-dessus, le système de fichiers fumera la base de données mysql.

Que faire si je fais de la base de données un fichier txt délimité en lecture seule?

Quoi de plus rapide dans ce cas?

Y a-t-il un certain point où si le fichier txt a trop d'enregistrements, il est préférable d'utiliser MySql?

BlueBerry - Vignesh4303
la source
4
Disons que vous avez 100 000 personnes dans votre annuaire et que vous voulez le bios de ceux qui sont nés en 1978. D'où pensez-vous que la fumée proviendra? Ouvrir des fichiers 100K dans le système de fichiers ou une seule requête en SQL?
ypercubeᵀᴹ
1
@ypercube - Je suis d'accord avec vous mais dans le cas de Linux OS il y a une limite pour les fichiers ouverts simultanément avec chaque processeur.
Satish Pandey

Réponses:

17

Le système de fichiers est utile si vous recherchez un fichier particulier, car les systèmes d'exploitation conservent une sorte d'index. Cependant, le contenu d'un fichier txt ne sera pas indexé, ce qui est l'un des principaux avantages d'une base de données. Un autre consiste à comprendre le modèle relationnel, afin que les données n'aient pas besoin d'être répétées encore et encore. Un autre est la compréhension des types. Si vous avez un fichier txt, vous devrez analyser les nombres, les dates, etc.

Donc - le système de fichiers peut fonctionner pour vous dans certains cas, mais certainement pas tous.

Rob Farley
la source
+1, les systèmes de fichiers ne sont pas non plus adaptés aux recherches partielles sur les noms de fichiers ou d'autres attributs. Lorsque le nombre de fichiers est si important, vous pouvez rencontrer des problèmes pour trouver des fichiers de cette façon. Cela dit, il est courant d'utiliser le système de fichiers pour les données qui ne sont pas de nature transactionnelle et où le contenu est toujours accessible en une seule unité, comme les pièces jointes de documents et les fichiers d'images.
NoChance
12

Cela dépend vraiment de ce que vous faites. En général, la vitesse à laquelle vous pouvez ouvrir un fichier en lecture sera meilleure que la vitesse à laquelle vous pouvez établir une connexion réseau. Ainsi, pour des opérations très simples, le système de fichiers est nettement plus rapide. Les systèmes de fichiers battront probablement aussi un SGBDR pour le débit de lecture brut car il y a moins de surcharge. En fait, si vous y réfléchissez, la base de données ne peut jamais être plus rapide que le système de fichiers sur lequel elle se trouve en termes de débit brut.

Pour les opérations très complexes, le système de fichiers est susceptible d'être très lent. Par exemple:

Lisez 10 lignes de ce fichier d'un milliard de lignes, puis recherchez les lignes correspondantes dans cet autre fichier. Je te plains si tu dois faire ça. Un bon serveur de base de données a cependant des stratégies pour le faire rapidement et bien, donc vous ne réinventez pas la roue.

De plus, vous devez vraiment comprendre ce que vous faites. Quelles données stockez-vous? Comment allez-vous le transformer? S'il s'agit de fichiers image de 100 000, votre solution sera très différente de celle d'un répertoire pour 100 000 personnes. (LDAP peut-être? Ou une base de données SQL? Cela dépend de ce que vous faites, peut-être.) La clé ici est de choisir les outils qui correspondent à ce que vous faites et qui vous donnent la possibilité d'ajouter plus d'utilisations, plutôt que ce qui semble le plus rapide pour certains. cas d'utilisation plutôt abstrait. Les bases de données sont de merveilleux outils, mais vous ne pouvez pas obtenir une bonne réponse à une question comme celle-ci.

Enfin, l'optimisation prématurée est la racine de tout mal. Choisissez des outils utiles maintenant et découvrez le reste plus tard.

Chris Travers
la source
Bien sûr, si vous avez deux instances virtuelles communiquant sur une carte réseau virtuelle ou une base de données exécutée sur la même instance que le serveur d'applications, si vous disposez d'une quantité raisonnable de mémoire, vous pouvez vous assurer qu'une lecture de base de données est plus rapide qu'une lecture fs la plus du temps, parce que si vous comptez sur le système de fichiers, vous êtes à la merci de l'algorithme de mise en cache / remplacement de page du pilote fs, alors qu'une base de données peut réserver des segments de mémoire de sorte qu'ils ne soient jamais échangés, ce qui place les besoins de latence de votre application en premier . En supposant que vous avez activé l'échange.
Parthian Shot
Votre dernière ligne me booste ... @Chris Travers
Biswadeep Sarkar
5

Le système de fichiers pourrait être plus rapide au début, mais j'en doute. Cependant, à mesure que la taille de vos données augmente, vous devrez probablement restructurer votre système de fichiers pour maintenir les performances. Outre leur capacité évidente à indexer sur plusieurs attributs, les bases de données ont tendance à mieux évoluer.

Les caches Web qui fonctionnent de manière similaire à ce que vous envisagez utilisent l'arborescence de répertoires pour maintenir les performances. Ils ont également tendance à être d'une échelle relativement fixe, de sorte qu'ils n'ont pas à faire face à une échelle croissante.

Pour ce type d'application, je commencerais par une base de données, car elle correspond mieux à vos besoins. Il évoluera beaucoup mieux à long terme. Par rapport à la plupart des systèmes de fichiers, une base de données sera également plus économe en espace.

BillThor
la source
4
Eh bien, ce n'est pas un problème. Créons simplement un autre fichier qui répertorie les valeurs et recherchons les décalages. En fait, nous pourrions optimiser cela pour la recherche avec btrees. Ensuite, nous savons où lire le fichier! Ensuite, je suppose que nous devrions ajouter un langage de requête déclarative à notre petit programme capable de joindre les résultats entre différents fichiers délimités et peut-être ensuite la conformité ACID .... Avec le temps, eh bien, pourquoi utiliser un SGBDR? ;-)
Chris Travers
@ChrisTravers J'y suis allé, je l'ai fait et je suis beaucoup plus heureux d'utiliser une base de données.
BillThor
5
l'idée était dans le sens de "ceux qui n'apprennent pas d'UNIX sont destinés à le réinventer mal."
Chris Travers
1

J'adore toujours venir sur ces forums et lire tous les gourous de la base de données qui disent que le système de fichiers ne peut pas le faire aussi rapidement que la base de données. Au contraire, un arbre correctement disposé, des tables de hachage bien conçues et leur enregistrement en tant qu'objet dans un fichier donneront les mêmes vitesses qu'une base de données et de mes tests. Une table de hachage et une arborescence de répertoires correctement conçues gagneront à chaque fois. Beaucoup moins de frais généraux. Récemment, je me suis éloigné de la programmation basée sur la base de données et plus sur l'arborescence des fichiers pour plus de simplicité et de portabilité du programme. Aucune base de données signifie une sauvegarde facile, fermez simplement votre arbre et partez. C'est très agréable et une recommandation de programmer de cette façon pour les clients ponctuels avec de petites applications. Regardez la grande image, ai-je le temps de concevoir la mienne ou de tirer simplement parti de ce qui existe déjà comme la base de données. Personnellement, j'aime enregistrer mes objets dans un fichier et les utiliser plus tard, il suffit de garder un œil sur la taille de vos tables et d'examiner comment utiliser un RandomAccessFile afin de pouvoir le rechercher rapidement comme une base de données et le décomposer en objets de table de hachage . Prendre plaisir. Rappelez-vous que les données que vous stockez dans le fichier consomment parfois le double de la mémoire en fonction de votre code. La table de hachage elle-même et généralement l'endroit où vous la consommez pour la visualiser.

JDeCarlo
la source
3
La seule réponse appropriée à cela que je puisse penser est la suivante .
Mark Storey-Smith
3
@ MarkStorey-Smith, c'est un lien intéressant, mais est-il présomptueux d'impliquer cette solution comme étant quelque part sur le spectre de Dunning-Kruger? :)
David Mann