Belirli MYSQL sorunun De-normalleştirme alternatif?

4 Cevap php

Oldukça özel bir optimizasyon sorunu karşılıklı.

Şu anda 4 veri normalize tablolar var.

Her saniye, belki binlerce kullanıcı AJAX kullanarak bu tablolardan up-to-date bilgi aşağı çekecek.

Şey, ben nispeten kolaylıkla gerekir hangi verinin alt kümesi tahmin edebilirsiniz ... Bu 4 normalize tablolarda en son 100 ya da öylesine girişleri olduğunu.

Ben de-normalleşmesini araştırma ... ama belki daha kolay bir çözüm olduğunu hissediyorum edilmiştir.

Ben nasılsa her saniye koşmak bir sql sorgusu, gerekli bilgi yoğunlaşmasına olabilecek bir geçici önbelleğe tabloda depolamak ve daha sonra kullanıcı sorguları hepsi sadece bu çizmek olduğunu düşünüyordum. Bu kompleks sadece bir kez çalıştırmak üzere 4 tablo birleştirmek sağlayacak, ve sonra oradan kullanıcıları sadece önbelleğe tablodan basit bir arama yapmak gerekiyor.

Bunun mümkün olup olmadığını gerçekten bilmiyorum. Bu veya başka önerileri Comments çok duyacağız.

Teşekkürler!

4 Cevap

Eğer istihdam edebiliyoruz memcache?

Bu db yükü azaltmak için yardımcı olur.

MySQL sürüm 5.1.6 çalıştırıyorsanız ya da geç yararlanabilirsiniz Eğer Events:

CREATE EVENT e                 
ON SCHEDULE
EVERY 1 MINUTE                 
DO
INSERT INTO tempTable (`col1`,`col2`,`col3`) 
    SELECT `col1`,`col2`,`col3`
    FROM table1
    WHERE col1 = "value"   

Sorgu önbelleği ile denediniz mi?

Select SQL_CACHE * from myTable  inner join etc..... ;

veri değişikliklerinin sık sonra bu kadar / herhangi bir yardım olmayabilir eğer. (Önbellek otomatik olarak her seferinde veri değişikliklerini geçersiz olacaktır.)

Note: always gaurd your database so, if you can try cache outside of the db. also you may need to check the variables SHOW VARIABLES LIKE %query_cache% to ensure query caching is on.

Denormalization shouldn't be a result of thinking. But of testing. What are problem queries? Do you have any?

Böyle bir trafik donanım, web sunucusu, iş mantığı katmanı hazır - diğer ekipmanlar mu? Ya da bir soru sadece bir hayal mi?