Voici la question ...
Sur 192 milliards de disques, quelles devraient être mes considérations?
Ma principale préoccupation est la vitesse.
Voici la table ...
CREATE TABLE `ref` (
`id` INTEGER(13) AUTO_INCREMENT DEFAULT NOT NULL,
`rel_id` INTEGER(13) NOT NULL,
`p1` INTEGER(13) NOT NULL,
`p2` INTEGER(13) DEFAULT NULL,
`p3` INTEGER(13) DEFAULT NULL,
`s` INTEGER(13) NOT NULL,
`p4` INTEGER(13) DEFAULT NULL,
`p5` INTEGER(13) DEFAULT NULL,
`p6` INTEGER(13) DEFAULT NULL,
PRIMARY KEY (`id`),
KEY (`s`),
KEY (`rel_id`),
KEY (`p3`),
KEY (`p4`)
);
Voici les questions ...
SELECT id, s FROM ref WHERE red_id="$rel_id" AND p3="$p3" AND p4="$p4"
SELECT rel_id, p1, p2, p3, p4, p5, p6 FROM ref WHERE id="$id"
INSERT INTO rel (rel_id, p1, p2, p3, s, p4, p5, p6)
VALUES ("$rel_id", "$p1", "$p2", "$p3", "$s", "$p4", "$p5", "$p6")
Voici quelques notes ...
- Le SELECT sera fait beaucoup plus souvent que le INSERT. Cependant, je souhaite parfois ajouter quelques centaines d'enregistrements à la fois.
- Sur le plan de la charge, il n'y aura rien pendant des heures, puis peut-être quelques milliers de requêtes en même temps.
- Je ne pense pas que je puisse plus normaliser (besoin des valeurs p dans une combinaison)
- La base de données dans son ensemble est très relationnelle.
- Ce sera de loin la plus grande table (la plus grande suivante est d’environ 900k)
MISE À JOUR (08/11/2010)
Fait intéressant, on m'a donné une deuxième option ...
Au lieu de 192 000 milliards, je pourrais stocker 2,6 * 10 ^ 16 (15 zéros, soit 26 Quadrillions) ...
Mais dans cette seconde option, je n'aurais besoin que de stocker un bigint (18) comme index dans une table. C'est ça - juste la colonne. Donc, je voudrais juste vérifier l'existence d'une valeur. Ajout occasionnel d'enregistrements sans jamais les supprimer.
Cela me fait donc penser qu'il doit exister une meilleure solution que mysql pour simplement stocker des numéros ...
Compte tenu de cette deuxième option, devrais-je prendre ou coller avec le premier ...
[edit] Je viens d'apprendre que des tests ont été effectués - 100 millions de lignes avec cette configuration renvoient la requête en 0.0004 secondes [/ edit]