Combien de lignes dans une firebase database sont trop nombreuses?

J’ai une table MySQL InnoDB avec 1 000 000 d’enregistrements. Est-ce trop? Ou des bases de données peuvent gérer cela et plus encore? Je demande parce que j’ai remarqué que certaines requêtes (par exemple, obtenir la dernière ligne d’une table) sont plus lentes (secondes) dans la table avec 1 millon lignes que dans une avec 100.

J’ai une table MySQL InnoDB avec les registres 1000000. Est-ce trop?

Non, 1 000 000 de lignes (enregistrements AKA) ne sont pas trop pour une firebase database.

Je demande parce que j’ai remarqué que certaines requêtes (par exemple, obtenir le dernier registre d’une table) sont plus lentes (secondes) dans la table avec 1 million de registres que dans une avec 100.

Il y a beaucoup à expliquer dans cette déclaration. Les suspects habituels sont:

  1. Requête mal écrite
  2. Ne pas utiliser de clé primaire, en supposant qu’il existe même sur la table
  3. Modèle de données mal conçu (structure de table)
  4. Manque d’index

J’ai une firebase database avec plus de 97 000 000 d’ enregistrements ( fichier de données de 30 Go ) et je n’ai aucun problème.

N’oubliez pas de définir et d’améliorer votre index de table.

Donc, il est évident que 1 000 000 n’est pas BEAUCOUP! (Mais si vous n’indexez pas, oui, c’est BEAUCOUP)

Utilisez ‘explain’ pour examiner votre requête et voir si quelque chose ne va pas avec le plan de requête.

Je pense que c’est une idée fausse commune – la taille n’est qu’une partie de l’équation en matière d’évolutivité des bases de données. Il y a d’autres problèmes qui sont difficiles (ou plus difficiles):

  • Quelle est la taille de l’ensemble de travail (c.-à-d. Combien de données doivent être chargées en mémoire et travaillées activement). Si vous insérez simplement des données et que vous ne les utilisez plus, c’est en fait un problème facile à résoudre.

  • Quel niveau de concurrence est requirejs? Un seul utilisateur insère-t-il / lit-il ou plusieurs milliers de clients opèrent-ils en même temps?

  • Quels sont les niveaux de promesse / durabilité et de cohérence des performances requirejs? Devons-nous nous assurer que nous pouvons honorer chaque engagement? Est-ce correct si la transaction moyenne est rapide ou si nous voulons nous assurer que toutes les transactions sont rapides et rapides (contrôle de qualité Six Sigma comme – http://www.mysqlperformanceblog.com/2010/06/07/performance-optimization- et-six-sigma / ).

  • Avez-vous besoin de résoudre des problèmes opérationnels, tels que ALTER le schéma de table? Dans InnoDB, c’est possible, mais incroyablement lent car il faut souvent créer une table temporaire en premier plan (en bloquant toutes les connexions).

Je vais donc dire que les deux problèmes limitants vont être:

  • Votre propre compétence pour écrire des requêtes / avoir de bons index.
  • Combien de douleur vous pouvez tolérer en attendant les instructions ALTER TABLE.

Si vous voulez dire 1 million de lignes, cela dépend de votre indexation et de la configuration de votre matériel. Un million de lignes n’est pas une grande quantité pour une firebase database d’entreprise, ou même une firebase database de développement sur un équipement décent.

Si vous voulez dire 1 million de colonnes (ce qui n’est pas forcément possible en MySQL), alors oui, cela semble un peu volumineux et causera probablement des problèmes.

Registre? Voulez-vous dire record?

Un million d’enregistrements n’est pas une grosse affaire pour une firebase database de nos jours. Si vous rencontrez un problème, ce n’est probablement pas le système de firebase database lui-même, mais plutôt le matériel sur lequel vous l’exécutez. Vous n’allez pas vous heurter à un problème avec la firebase database avant de manquer de matériel pour le lancer, très probablement.

Maintenant, évidemment, certaines requêtes sont plus lentes que d’autres, mais si deux requêtes très similaires s’exécutent à des moments très différents, vous devez déterminer le plan d’exécution de la firebase database et l’optimiser, par exemple, utiliser des index corrects, une normalisation correcte, etc.

Incidemment, il n’y a pas de “dernier” enregistrement dans un tableau, d’un sharepoint vue logique, ils n’ont pas d’ordre inhérent.

J’ai vu des tables non partitionnées avec plusieurs milliards d’enregistrements (indexés), qui se sont jointes pour un travail d’parsing. Nous avons finalement divisé la chose mais honnêtement, nous n’avons pas vu beaucoup de différence.

Cela dit, c’était dans Oracle et je n’ai pas testé ce volume de données dans MySQL. Les index sont votre ami 🙂

En supposant que vous voulez dire “enregistrements” par “registres” non, ce n’est pas trop, MySQL s’adapte très bien et peut contenir autant d’enregistrements que vous avez d’espace sur votre disque dur.

De toute évidence, les requêtes de recherche seront plus lentes. Il n’y a vraiment aucun moyen de contourner cela, sauf que les champs sont correctement indexés.

Plus la table est grande (comme dans d’autres lignes), les requêtes les plus lentes seront généralement exécutées s’il n’y a pas d’index. Une fois que vous avez ajouté les index appropriés, les performances de votre requête doivent s’améliorer ou du moins ne pas se dégrader autant que la table se développe. Cependant, si la requête elle-même renvoie plus de lignes au fur et à mesure que la table s’agrandit, vous commencerez à voir à nouveau la dégradation.

Bien que les lignes 1M ne soient pas très nombreuses, cela dépend également de la quantité de mémoire disponible sur le serveur de firebase database. Si la table est trop grande pour être mise en mémoire cache par le serveur, les requêtes seront plus lentes.

L’utilisation de la requête fournie sera exceptionnellement lente en raison de l’utilisation d’une méthode de fusion de sorting pour sortinger les données.

Je recommanderais de repenser la conception pour que vous utilisiez des index pour la récupérer ou pour vous assurer qu’elle est déjà commandée de cette manière afin qu’aucun sorting ne soit nécessaire.