İşte soru bu ...
192 trilyon kayıt dikkate alındığında, düşüncelerim neler olmalı?
Asıl endişem hızdır.
İşte masa ...
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`)
);
İşte sorgular ...
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")
İşte bazı notlar ...
- SEÇİM, INSERT'den çok daha sık yapılacaktır. Ancak, bazen bir seferde birkaç yüz kayıt eklemek istiyorum.
- Yük olarak, saatlerce hiçbir şey olmayacak, belki bir kerede birkaç bin sorgu yapacaksınız.
- Daha fazla normalleştirebileceğimi sanma (bir kombinasyondaki p değerlerine ihtiyacım var)
- Bir bütün olarak veritabanı çok ilişkiseldir.
- Bu şu ana kadarki en büyük masa olacak (bir sonraki en büyük 900 bin civarında olacak)
GÜNCELLEME (08.08.2010)
İlginç bir şekilde, bana ikinci bir seçenek verildi ...
192 trilyon yerine 2.6 * 10 ^ 16 (15 sıfır, yani 26 katrilyon) depolayabilirim ...
Ancak bu ikinci seçenekte bir tablodaki indeks olarak sadece bir bigint (18) kaydetmem gerekiyor. İşte bu - sadece bir sütun. Bu yüzden sadece bir değerin varlığını kontrol ediyor olurdum. Zaman zaman kayıt ekleme, asla silmeme.
Bu sayede daha iyi bir çözüm olması gerektiğini düşünmekteyim, sayıları saklamak için mysql ...
Bu ikinci seçenek göz önüne alındığında, ilk al ya da yapalım mı ...
[edit] Sadece yapılan bazı testlerden haberleri aldım - bu kurulumda 100 milyon satır, soruyu 0.0004 saniyede döndürür [/ değiştir]