2010-01-19 5 views
0

J'ai quelques questions concernant les performances de la base de données en général. J'utilise Sqlite mais je suppose que les remarques de performance sont applicables à toutes les bases de données relationnelles?conception et performance de la base de données

J'ai une base de données qui contient une table qui stocke des données d'environ 200 variables. J'écris environ 50 variables par seconde à la table. Une variable writen contient l'identifiant de la variable, une valeur et un horodatage. La lecture est très rarement effectuée mais doit être aussi rapide que possible pour obtenir les données par variable dans l'ordre chronologique. Quand je fais une requête j'ai toujours juste besoin d'obtenir les données de 1 variable.

Comment est-ce que je conçois la base de données pour que la lecture soit aussi rapide que possible: 1. Je fais 1 tabel qui contient toutes les variables . La variable est stockée sous la forme et un ID. Je indexe le tableau sur l'ID et l'horodatage. La mauvaise partie est que l'index rend l'écriture slowe (r). 2. Je crée 200 tables pour chaque variable et indexe l'horodatage.

Je pense que la deuxième solution est la plus performante, mais créer une table pour chaque variable ne semble pas juste. Quelqu'un peut me donner un conseil?

Merci

Répondre

1

Si vous voulez vraiment utiliser une base de données, utilisez la première approche, mais assurez-vous d'insérer vos données dans une seule transaction; Les benchmarks montrent que l'écriture est beaucoup plus rapide. Vos recherches sont-elles effectuées sur le nom/id de la variable ET l'horodatage ou le nom de la variable uniquement. L'indexation sur l'horodatage peut ne pas être nécessaire ...

1

Êtes-vous sûr de vouloir une base de données? Au vu de cela, un fichier plat fonctionnera assez bien pour vous, et vous ne semblez pas avoir besoin des pièges d'une base de données. Créez simplement un fichier plat pour chaque variable et gardez les poignées à chaque ouverture. Ecrivez-les à travers vos E/S tamponnées standard aussi souvent que nécessaire. Pour lire, il suffit d'ouvrir un fichier et de le désérialiser.

1

Si vous utilisez une base de données relationnelle, je suppose que ces variables sont toutes liées? Si ce ne sont que des valeurs, par exemple, des paramètres, alors peut-être qu'un fichier ou quelque chose de similaire peut être meilleur. Si vous devez uniquement interroger des valeurs pour UNE variable, alors si vous insistez pour utiliser une base de données (ce qui n'est peut-être pas une mauvaise chose!), Vous devez créer une table par variable: id (unsigned int , auto-incrément, clé primaire) horodatage (datetime ) variable (ce qu'il est censé être)

ne pas lésiné sur les données juste parce que « cela pourrait prendre plus de place sur le disque dur » - qui ne conduit à difficulté.

Questions connexes