Aqui está a pergunta ...
Considerando 192 trilhões de registros, quais devem ser minhas considerações?
Minha principal preocupação é a velocidade.
Aqui está a mesa ...
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`)
);
Aqui estão as consultas ...
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")
Aqui estão algumas notas ...
- Os SELECTs serão feitos com muito mais frequência que o INSERT. No entanto, ocasionalmente, quero adicionar algumas centenas de registros por vez.
- Em termos de carga, não haverá nada por horas e talvez alguns milhares de consultas ao mesmo tempo.
- Não pense que posso normalizar mais (preciso dos valores de p em uma combinação)
- O banco de dados como um todo é muito relacional.
- Esta será a maior tabela de longe (a próxima maior é de cerca de 900k)
ATUALIZAÇÃO (11/11/2010)
Curiosamente, me foi dada uma segunda opção ...
Em vez de 192 trilhões, eu poderia armazenar 2,6 * 10 ^ 16 (15 zeros, o que significa 26 quadrilhões) ...
Mas nesta segunda opção, eu precisaria armazenar apenas um bigint (18) como o índice em uma tabela. É isso - apenas a coluna. Então, eu apenas verificaria a existência de um valor. Ocasionalmente adicionando registros, nunca os excluindo.
Então isso me faz pensar que deve haver uma solução melhor do que o mysql para simplesmente armazenar números ...
Dada esta segunda opção, devo pegar ou ficar com a primeira ...
[edit] Acabei de receber notícias de alguns testes realizados - 100 milhões de linhas com essa configuração retornam a consulta em 0,0004 segundos [/ edit]