Je développe un produit qui, dans le cadre de son fonctionnement, doit suivre un grand nombre de fichiers / répertoires. L'idée est de stocker les informations statistiques dans une base de données puis, au démarrage, de créer des montres pour chaque fichier. Les fichiers modifiés seront mis en file d'attente (dans la base de données) pour une synchronisation de groupe avec une base de données distante. Ils seront synchronisés par ordre de priorité, un nombre compris entre 1 et 10.
Informations sur la base de données:
- <100 000 entrées d'informations statistiques
- Base de données entière lue au démarrage, seul le chemin du fichier est nécessaire
- Les fichiers en file d'attente auront un champ prioritaire (rien d'autre ne doit être recherché par)
- Les insertions peuvent être lentes
J'ai trouvé quelques bases de données qui, je pense, fonctionneront, mais je ne sais pas laquelle serait la meilleure:
- Redis - stocke le chemin du fichier comme clé, les données statistiques comme valeur; la file d'attente serait une liste
- MongoDB - plus d'options de requête que Redis, mais toujours rapide
Je pense qu'une base de données NoSQL serait la meilleure solution ici, car il n'y a pas trop de logique relationnelle en cours et la taille totale des données n'est pas trop grande (quelque chose comme <100 Mo, plus proche de <30 Mo). J'ai regardé SQLite car il semble assez simple pour être intégré dans une application installable.
Comme il s'agit d'une application distribuée pour les utilisateurs finaux et non d'un serveur à charge élevée, la base de données n'a pas à prendre en charge de nombreux utilisateurs simultanés. La priorité principale ici est de trouver une base de données dont le modèle a le plus de sens.
Donc la question, quelle base de données serait la plus applicable à cette situation?
Existe-t-il également d'autres bases de données qui auraient plus de sens pour une application comme celle-ci?
la source
Si vous n'êtes pas concerné par la logique relationnelle, souhaitez une vitesse de lecture très rapide et que vous êtes prêt à travailler avec un SGBDR, je me risquerais à dire MySQL. Pourquoi ???
Le moteur de stockage MyISAM dispose d'une option qui permet d'augmenter la structure physique de la table pour de meilleures performances. Quelle est cette option? L'option ALTER TABLE ROW_FORMAT.
Par exemple, le livre MySQL Database Design and Tuning recommande d'utiliser ROW_FORMAT = FIXED aux pages 72,73. Cela convertira en interne tous les champs VARCHAR en CHAR. Cela rendra la table MyISAM plus grande, mais les SELECT exécutés par rapport à elle seront beaucoup plus rapides. Je peux personnellement témoigner de cela. J'ai eu une fois une table de 1,9 Go. J'ai changé le format avec ALTER TABLE tblname ROW_FORMAT = FIXED. Le tableau a fini par 3,7 Go. La vitesse des SELECTs par rapport à elle était 20-25% plus rapide sans amélioration ou changement d'autre chose.
Que faire si vous avez déjà une table MyISAM remplie de données? Vous pouvez obtenir des métriques pour les définitions de colonne recommandées en fonction des données présentes dans la table MyISAM. Quelle requête présente ces mesures?
PROCEDURE ANALYZE () Ceci n'affichera pas les données. Il lira la valeur de chaque colonne et recommandera des définitions de colonne. Par exemple, si vous avez une colonne de type dont les valeurs sont 1-4, cela suggérerait d'utiliser un ENUM de ces 4 valeurs. Vous pouvez alors choisir d'utiliser TINYINT ou CHAR (1) car ils prennent la même quantité d'espace (1 octet).
Voici autre chose à considérer: puisque vous envisagiez d'utiliser une base de données NoSQL, avez-vous déjà pensé à utiliser MyISAM de manière NoSQL? C'est tout à fait possible. La page 175 du même livre que j'ai mentionné suggère d'utiliser des structures HANDLER pour lire un tableau sans les bagages relationnels . En fait, la page 175 donne cet exemple:
Ce tableau contient des millions de lignes. Supposons que vous devez créer une application d'analyse de données répondant aux exigences suivantes:
Ces commandes permettent des lectures rapides et sales à partir du tableau:
J'espère que cela donnera matière à réflexion. Veuillez l'examiner.
CAVEAT
Ce qui est très ironique au sujet de moi écrivant ce post particulier, c'est que j'ai écrit un post précédent sur HANDLER utilisé dans les binaires Percona Server et pensant que son utilisation était obsolète . Depuis ce poste plus ancien, je n'ai jamais pensé que j'écrirais quelque chose à l'appui des structures HANDLER. Je me tiens maintenant corrigé.
la source
HANDLER
structures et les capacités, la page de manuel de mysql est la seule page que j'ai pu localiser, et il n'y a pas grand-chose là-bas ... Je l'ai demandé en tant que nouvelle question ici: dba.stackexchange.com/q/253653/23271 et espérais-vous connaître des ressources supplémentaires?