PHP / MySQL: yenisini almak için en iyi yolu?

3 Cevap php

Biz grup üyeleri, iletileri koyabilirsiniz sitemizde gruplarının çeşit var. Ben yeni girişler varken her grubun üyelerini fark istiyorum.

Bunu yapmanın en iyi yolu nedir?

3 Cevap

Bunları hemen bildirmek istiyorsanız, sadece hemen mesajını saklamak gibi ne / onlara bir e-posta gönderebilir.

Aksi takdirde, her kullanıcıya karşı MessageId 'okumak' yüksek depolamak, daha sonra oldukça kolay herhangi ardından gelen mesajlar getirebilir.

Mümkün olandan grup başına iletilerin bir sürü olacaktır Eğer LastNotificationTime ve daha sonra oluşturulan zamanla mesajları aramak için daha sonra program görev gibi grup düzeyinde alana sahip değer olduğunu akımı LastNotificationTime değer şimdiki zamana güncelleme LastNotificationTime (daha sonra kullanıcılar için onlar hakkında rapor gönderir) ve.

Hatta daha iyi bir kullanıcı düzeyi LastActivityTimeInGroup alan ve kullanıcılar herhangi bir ileti alırsınız o zaman ve herhangi değilse yani sadece inaktif (belki yumuşak deneyimi için bazı dakika ekleyerek) onunla mesajı oluşturma tarihini karşılaştırmaktır 1'den fazla görev başına zaman aralığı.

Ben şu anda bu amaçla (memcachedb) için bir anahtar deposu kullanın. ne yapabilirdi böyle 'messageread_ {message.id} _ {user.id}' (ben sadece int 1 kullanın) seçtiğiniz ne olursa olsun değer ayarlanmış olarak bir anahtar eklemek için, sonra tüm bir getmulti yapmak için bir memcached istemci kullanın mesajlar kullanıcı (yukarıda yayınlanmıştır tuşları bir dizi olarak) vardır. döndürülen herhangi bir tuşa okunur :)

Ben kullanıcılara büyük sonuçlar ile bir okunmamış ileti sayısını vermek için bu sorgu kendisi bir 60 saniye önbellek ile bu yöntemi kullanın.

http://memcachedb.org/

(Eğer bir yorum görerek sonunda ve bir cevap olduğunu bir kaçırmak olabilir gibi) ben aslen dolayısıyla bu bağlamda yüksek id Moot yapma, yüksek id tür denetimi ve kısa bir süre sonra çok düzeyli bir açıklama sisteme geçiş kullanılır. bugüne kadar bu yöntem çok hızlı olmuştur.

Böyle bir şey yapmak için buraya pecl gelen memcache veya memcached istemci yüklemeniz gerekir http://pecl.php.net/package/memcache ve burada http://pecl.php.net/package/memcached, sırasıyla. (kabuk erişimi olan bir kutu gerekir), ve hizmeti başlatmak memcachedb bir kurarım.

istemci sahte kod böyle bir şey çalışır:

/ / Mesaj almak bir kullanıcı bir parçasıdır

kodu ...

/ / Bu listeden memcachedb tuşları bir dizi kurmak, set anahtar daha sonra başvurmak message_id için

$keys = array();
foreach($mresult as $current){
    $keys[$current['message_id']] = 'messageread_'.$current['message_id'].'_'.$myid;
}

/ / Kullanarak "memcached" php istemcisi

$result = $memcacheobj->getMulti($keys);

getmulti 'memcachekey' => 'memcachevalue' bir yapı içinde bir ilişkisel dizi döndürür

Sonuç üzerinde / / döngü, tuşları sonucu bulundu çıkarılması

foreach($keys as $key => $val){
    if(isset($result[$val])) unset($keys[$key]);
}

/ / Temizleme, message_id değerleri ayarlayın (isteğe bağlı) array_values ​​ile dizi anahtarlarını sıfırlamak için okunmamış iletilerin dizi çevirmek dizi var

$unread = array_values(array_flip($keys));

şimdi yapısında okunmamış iletilerin bir dizi var:

array( 0 => 12, 1 => 23, etc... )

Bu tabii bazı temizlik kadar bu optimize etmek için yapılabilir im sürecinin sadece bir kaba mockup :)