Comment MySQL stocke-t-il ses données
J'ai regardé autour de Goole, mais n'ai pas trouvé la bonne réponse. Est-il stocker les données dans un seul gros fichier? Quelles méthodes faut-il utiliser pour rendre l'accès aux données plus rapide que la simple lecture et en écriture à un fichier régulier?
source d'informationauteur Tallboy
Vous devez vous connecter pour publier un commentaire.
Certains DBMSes stocker l'ensemble de la base de données dans un seul fichier, une division des tables, des index et autres types de fichiers distincts, certains diviser des fichiers non par l'objet, mais par une partie de la mémoire/des critères de taille, certains peuvent même entièrement contourner le système de fichiersetc etc...
Je ne sais pas laquelle de ces stratégies MySQL utilise (il dépend probablement si vous utilisez MyISAM vs MyISAM etc.), mais heureusement, il n'a pas d'importance: à partir du point de vue du client, c'est un SGBD détail d'implémentation, le client doit rarement s'inquiéter.
Tout d'abord, DBMses ne sont pas seulement le rendement:
Quant à votre question spécifique de la performance, de données relationnelle est très "sensible", à l'indexation et le regroupement, qui est abondamment exploitée par DBMSes d'atteindre la performance. En plus de cela, la mise en fonction de la nature de SQL permet de le SGBD choisir le meilleur moyen pour récupérer les données (en théorie au moins, certains DBMSes sont mieux que d'autres). Pour en savoir plus sur les SGBD performance, je vous le recommande chaudement: Utiliser L'Index, Luke!
Aussi, vous avez probablement remarqué que la plupart des DBMSes sont plutôt les anciens produits. Comme décennies vieux, ce qui est vraiment éons dans notre industrie. Une conséquence de ceci est que les gens ont eu beaucoup de temps pour optimiser le diable sur le SGBD base de code.
Vous pouvez, en théorie, de réaliser toutes ces choses à travers les fichiers, mais je crois que vous feriez finir avec quelque chose qui ressemble terriblement à proximité d'un SGBD (même si vous avez le temps et les ressources pour le faire). Alors, pourquoi réinventer la roue (à moins que vous ne vouliez pas la roue en premier lieu 😉 )?
1 Habituellement, si une sorte de "journalisation" ou "journal des transactions" mécanisme. En outre, afin de minimiser la probabilité de la "logique" de la corruption (en raison de l'application de bugs) et de favoriser la réutilisation de code, la plupart des DBMSes support déclaratif contraintes (domaine, la clé et référentielle), les déclencheurs et les procédures stockées.
2 Par isoler les transactions et même en permettant aux clients explicitement verrouillage des parties spécifiques de la base de données.
Cette question est un peu vieux mais j'ai décidé de répondre de toute façon depuis que j'ai fait quelques recherches sur le même. Ma réponse est basée sur le système de fichier linux. Fondamentalement, mySQL stocke les données dans des fichiers de votre disque dur. Il stocke les fichiers dans un répertoire spécifique qui a la variable système "datadir". L'ouverture d'une console mysql et en exécutant la commande suivante va vous dire exactement où se trouve le dossier.
mysql> SHOW VARIABLES LIKE 'datadir';
+---------------+-----------------+
| Variable_name | Value |
+---------------+-----------------+
| datadir | /var/lib/mysql/|
+---------------+-----------------+
1 row in set (0.01 sec)
comme vous pouvez le voir à partir de la commande ci-dessus, mon "datadir" était situé dans
/var/lib/mysql/
. L'emplacement de la "datadir" peut varier dans les différents systèmes. Le répertoire contient des dossiers et des fichiers de configuration. Chaque dossier représente une base de données mysql et contient des fichiers avec des données de cette base de données spécifique. ci-dessous est une capture d'écran de la "datadir" répertoire dans mon système.Chaque dossier dans le répertoire représente une base de données mysql. Chaque dossier de base de données contient fichiers qui représentent les tables dans la base de données. Il y a deux fichiers pour chaque table, l'un avec un
.frm
d'extension et de l'autre, avec un.idb
extension. Voir la capture d'écran ci-dessous.la
.frm
tableau de fichier stocke la table du format. vérifiez ici pour des informations détaillées MySQL .frm Format de Fichierla
.ibd
fichier stocke les données de la table. vérifiez ici pour des informations détaillées MyISAM Fichier Par Table TablespacesC'est ça, les gars! j'espère que j'ai aidé quelqu'un.
Lorsque vous stockez des données dans un fichier plat, il est compact et efficace pour lire séquentiellement, mais il n'y a pas de moyen rapide d'accéder au hasard. Cela est particulièrement vrai de la longueur variable des données telles que des documents, des noms ou des chaînes. Pour permettre l'accès aléatoire rapide, la plupart des bases de données stockent des informations dans un fichier unique en utilisant une structure de données appelée un B-Arbre. Cette structure permet pour l'insertion, la suppression et la recherche à être rapide, mais il peut utiliser jusqu'à 50% plus d'espace que le fichier d'origine. Cependant, en général, ce n'est pas un problème que l'espace disque est bon marché et le plus important, tandis que les principales tâches nécessitent généralement un accès rapide.
Pour plus d'informations:
http://en.wikipedia.org/wiki/B-tree
Regardant attentivement dans le MySQL docs, nous constatons que les indices peuvent éventuellement être mis à "ARBRE" ou "HASH" de type. L'intérieur d'un seul fichier MySQL, plusieurs indices sont stockés qui peut utiliser une structure de données.
Bien que la sécurité et la simultanéité sont importants, ceux-ci ne sont pas POURQUOI les bases de données existent, mais des fonctionnalités supplémentaires. La première des bases de données existent parce qu'il n'est pas possible d'accéder de manière aléatoire séquentiel fichier contenant des données de longueur variable.
Techniquement tout est un "fichier", y compris les dossiers.. intégralité de votre disque dur est géant fichier. Ayant dit que, oui, les bases de données relationnelles, MySQL inclus stocker des données dans un fichier de Données sur le disque dur. La différence entre une Base de données et de l'écriture/lecture d'un fichier est des pommes et des oranges. Les bases de données structurée de façon de stocker et de rechercher et récupérer les données dans une manière que vous ne pourrait jamais reproduire par juste de la lecture et de l'écriture dans un fichier.. Sauf si vous avez écrit votre propre db de cours..
espère que ça aide.