Veritabanı Tasarımı

2 Cevap php

Ben bir proje için bir mysql veritabanı tasarımı oluşturmaktır çalışıyorum. Sorun iyi çözüm ile geliyor. Temelde benim uygulamada, ben kullanıcı başına yaklaşık 10-30 satır eklemek gerekir. Birincil anahtar rasgele DAMGA (16) dize olacaktır. Ayrıca "veri" olarak adlandırılan (bir dizin ile) bir datetime indeks ve ek bir satır olacak.

Günden güne, sadece masaya ekler ve aramaları ağır bir miktar olacaktır. Aramaları her zaman (yani kullanıcı başına bu 10-30 satırları katılmadan) birincil anahtar dayalı katıldı olacaktır.

Ben zaman zaman belirli birkaç ay (ya da tam bir yıl bile) bakmak ve de "veri" endeksinde fonksiyonları BY mysql GROUP kullanmak mümkün gerekecektir.

Bugünkü hacmi ve tahminlere de, ben tablo 9.3m satırları / ay büyümek için beklenebilir. Ben bu artış bekliyoruz.

Yani benim soru bu aşağı gelir: mysql bölümleri, programatik masa ayrılması veya başka bir çözüm? ve işler iyi aya veya yıla göre ayrılır? Biz RHEL üzerinde çalışan, bu yüzden MySQL 5.1 iş biraz olabilir alıyorum, ama bu daha iyi bir çözüm eğer o gidiş için değer olabilir.

InnoDB zaten bu proje için seçildi. Günlük performans gün temel husustur.

2 Cevap

Tarihler (ve belki de ayrıca kullanıcı bu kullanıcı başına veri olduğunu ve kullanıcıların bir sürü var) üzerinde veri bölümlemek.

Ardından SUM, COUNT, AVG, vb ihtiyacınız tarafından uygun grup ile bir aylık tablo oluşturun. Siz de bu tabloyu bölümlemek (ama tarihler muhtemelen anlamlı bir bölüm olmayacak)

Sonra aylık tablo gibi yıllık bir tablo oluşturun.

REPLACE INTO ... SELECT ... ifadeleri ile aylık ve yıllık tabloları doldurmak.

Bu sorunuza cevap vermez, ama o sözü edilmesi gereken ...

Birincil anahtar rasgele DAMGA (16) dize olacaktır.

Bu kötü bir fikir olduğunu. AUTO_INCREMENT bir UNSIGNED BIGINT sütunu kullanın. Anahtar yönetimi veya çarpışmalar bu şekilde endişelenmenize gerek olmayacaktır: tekerleği yeniden icat etmeye gerek yok.