PHP Veri Alma Optimized for MySQL Veritabanı Tasarımı

2 Cevap php

Ben oldukça yeni bir MySQL geliştirici yaşıyorum ve ben ilk tavsiye biraz yapabileceği bir proje üzerinde başlıyorum ...

Ben öncelikle (1-5k arası) öğeleri belirli sayıda tutan ve her biri ile ilgili yaklaşık 40 boolean değişkenleri olacak bir veritabanı oluşturma. Kullanıcılar daha sonra bu 40 değerlerin kendi seçim giren olacaktır ve 'en iyi' eşleşen öğeleri belirlemek için sistem işidir. Bu none varsa, 40 değişkenleri maç veya ürün, vb 39 maç olanlar olabilir

Yani, sorgular bir çift herkes zaman varsa!

  1. MySQL Benim deneyim bu boyutta bir veritabanı için ayrı tablolar halinde verileri bölerek önemli bir hız avantajı vardır. Daha fazla tablo için giderler genel performansını herhangi bir geçerli fark yaratmak için sadece çok büyük. Bu nedenle, ben sadece tüm bilgileri (tüm sorgular SEÇİN olacak gibi masa kilitleme bir sorun değildir) saklamak için 40 sütun ve kadar 5000 satır ile büyük bir tablo oluşturmak için öneren olacaktır. Başkalarının düşünce ve tecrübesi ile bu maçı mı?
  2. Ne 'en iyi' maç dönen en etkili yolu olacaktır? Bu bile possible veritabanı yapısı ile ve SQL komutları tek başına ya da ben sadece PHP tüm dizi döndürmek ve iyi maçlar belirlemek için orada sezgisel fonksiyon bir form çalıştırmak zorunda gidiyorum mı?

Zaman ve için teşekkürler yardım!

2 Cevap

Tek bir tablo kesinlikle doğru. Sen bit başına bir bool ile bir "maske" olarak, bir tek BIGINT sütuna 64 boolean değişkenlere kadar saklamak ve BIT_COUNT(~(the_column ^ user_preferences)) hangi saymak gibi son derece hızlı maç hesaplayabiliriz kaç bit (PHP size 64 bitlik tamsayılar manipüle sorunları vermelidir, siz iki bit sayımı hala çok hızlı olacak toplanmasıyla, 32 bit her iki columnns kullanabilirsiniz), kullanıcının tercihlerini veren kolon ve maske arasındaki eşittir.

Ben bu tür bilgileri depolamak için en iyi yöntem olduğunu sanmıyorum. Bu görsel iyi görünebilir ama tüm depolama mantıksal değerler ise o zaman ben her eşleşen gerçek değeri için girişleri ile iki tablo ve bir bağlantı tablo yaratacaktır.

Mysql yerine sütun satırları aramak için tercih olarak hiçbir havai burada. Sayısı () fonksiyonu daha sonra kullanışlı gelecektir.

Ben herhangi bir eşleşme bulmak için başarısız eğer böylece 39 ve bir eşleşme bulmak için arama çalışması için PHP dönmek zorunda olacak eminim. Bir recursive fonksiyon bunu yapmak için iyi bir yol olurdu.

örneğin

Table xOption id, name

table yOption id, name

table xOption_yOption xOption_id, yOption_id

Bu konuda diğer iyi şey kolayca şebekeye daha fazla X veya Y seçenekleri ekleyebilir ve çok seçenekleri hakkında daha fazla bilgi depolayabilir olduğunu.

çok indexs kullanmayı unutmayın.