Php - Birden çok sayaç artışlarını optimize

1 Cevap php

Çok ağır bir trafik lambası sunucuda ben sayaçları gibi çeşitli veri öğeleri izlemek için bir bellek tablo kullanıyorum. Bu gibi uygulanır:

$query = "INSERT INTO daily_info_mem SET di_num=1 ,di_type=9, di_date = current_date(), di_sid= $sid_int ,di_name='user_counter' ON DUPLICATE KEY UPDATE di_num=di_num+1";

Dizin benzersiz di_type ve tarihi ayarlar, böylece sayaç bu tarih için varsa o zaman bu tarih ve veri türü için bir satır 0 değeri ile oluşturulur eğer, artırılır di_type.

Her bir sayfa için birkaç tür sorguları vardır. Hangi birkaç mysql çağrı anlamına gelir.

Birkaç keyfi sayaçları güncellemek ve yine gerekirse satır oluşturarak veya varsa vale artan fikir tutacak tek bir mysql çağrı içine mümkün olduğunca bu kadar optimize etmek mümkün mü?

1 Cevap

Ben tamamen bu sorgu türünü yeniden düşünme tavsiye ederim. Sen daha iyi bellek ele alınabilir bir şey için orada birincil veritabanı çok vuruyorlar. Kesinlikle her zaman anında MySQL güncelleştirmek için gerekli midir? MySQL dışında ve memcached içine alabilirsiniz eğer çok büyük bir performans yumru göreceksiniz, ve her zaman verileri harmanlamak ve (her 5 dakika, diyelim ki) düzenli MySQL itin arka planda çalışan bir komut dosyası var böylece hiçbir şey kaybetmezler.

Kesinlikle MySQL içinde olması gerekiyorsa, yerine bir InnoDB tablo daha bir HEAP tablo kullanarak daha iyi olabilir. Sen "yinelenen anahtar" gevşek olacak ama her zaman güncelleme yapmak için bir saklı yordam / işlevini kullanabilirsiniz. Eğer gevşek bir şey yok yani Ve yine, her zaman ... "INSERT INTO SELECT FROM ..." bir archive-tipi tabloya planlanan sorgu / zamanlı komut olabilir.

Ya da, istatistikler depolamak için tamamen farklı bir veritabanını kullanır. MongoDB bu istatistik toplama için çok iyi bir seçim kılan upsert s vardır ve $inc rements.