Kişiselleştirilmiş bir olay akışı uygulamak nasıl?

5 Cevap php

Ben bir STK için bir ilham kaynağı sitesi üzerinde çalışmak için gidiyorum ve ben "Michael apple pie önerilir" gibi olayları ile Facebook-vari bir olay akışı çeşit, uygulamak için arıyorum, "John {yorumladı [(1)]} "," Caramel fudge "Alice tarafından 8 saat önce yayınlanmıştır, vb

Şey bu olaylar faize dayalı, bu yüzden birisi sadece karamel ve kiraz ilginizi çekebilir ve daha sonra elmalı turta veya çikolatalı kek görmek gerektiğidir. Orada permütasyon bir sürü bunun için vardır ve anında bir kullanıcının kişiselleştirilmiş olay akışı üreten bazı oldukça pahalı veritabanı sorguları anlamına gelecektir.

Yani benim düşünce alıcı kullanıcı ve bir eylem olay oluyor her arka plan işleme çeşit yaparak yayınlanmıştır olay (muhtemelen basit bir SQL JOIN tablo) arasındaki ilişkiyi önceden oluşturmak oldu.

Bir olay karşısında kullanıcıların yüzlerce tercihlerini tartmak için gerekli çalışmalar önemli olmak zorundadır, bu nedenle işi tetikler POST isteği bir parçası olarak yapılamaz, bu yüzden de bir sürü iş yapmak zorunda olacak farklı bir süreçtir. Ben şu anda bu görev için Gearman bakıyorum, ama ben çok önerilerinize açığım.

Benim için işimi yapmak için birini aramıyorum, ama herkes bu tür bir şey bina ile önceden deneyim varsa, ben sizin düşüncelerinizi duymak isteriz.

5 Cevap

Ben bir sosyal ağ sitesinde bir haber akışı bina bazı deneyimi vardı ve olayların ve çoklu ilgi düzeyleri (veya gizlilik ayarları veya kullanıcı izinleri) birden fazla türde olduğunda evet, sorgular, çok hızlı bir şekilde çok karmaşık alabilirsiniz.

Olaylar daha sık üretilen daha görülüyor ki varsayımı üzerinde, bu olay gerçekleştiğinde yerine biri haber akışı istekleri her zaman yerine, bazı denormalisation yapmak ve bir olayın potansiyel izleyiciler hesaplamak için mantıklıdır.

(Kendi okuyucu ile ilgili, haber akışı onları görmek insanların) basit mesajı nesneleri içine (kendi yaratıcıları ile ilgili) bu olay nesneleri dönüştüren bir arka plan işlemi çalışan öneririm. Olayın başına birçok mesajları ile sona erebilir, ama bu çok daha hızlı ön uç isteklerini yapacak, ve arka plan işlemleri üzerine iş yükünü.

Ben Gearman kullanılmaz ettik, ama bir arka plan işleminde, uygulamanın ortamı yüklemek ve bir sıra ile işlemek için olayları almanızı sağlar türden bir şey ise, o zaman muhtemelen iyi bir fikir.

Benim basit bir çözüm beanstalkd ve kendi PHP betikleri kullanarak kendi rulo oldu.

DB (daha fazla bize anlatmak isteyebilirsiniz) yapılandırılmıştır nasıl biliyorum, ama yok gibi bariz bir şey

SELECT events.* FROM events, event_tags, user_tags
     WHERE event_tags.event_id = events.id 
         AND event_tags.tag_id = user_tags.tag_id
         AND  user_tags.user_id = <$user_id>

Eğer biryere endeksleri var varsayarak, bana son derece ağır görünmüyor

Bu uygun bir indeks ile çözülebilecek bir şey gibi geliyor. Ben veritabanı bunu işleme kapasitesine sahip karinesi etrafında çözümü oluşturmak, ancak veritabanı önünde bir hizmet yerleştirin ve tüm istemciler bu noktada üzerinden gidelim istiyorum. Işler çok yavaş gidiyor başlarsanız, bu katmanda önbelleğe çeşitli tanıtabilirsiniz. Çoğu performans kararları olduğu gibi, sağ ön bunu yapmaya çalışıyor, muhtemelen iyi bir fikir değildir.

Facebook bu tür bir şey yapmak ve onu kaynaklı, ben bu konuda çok bilmiyorum açmak için kendi veritabanı geliştirdi ama bunun olabileceğini tahmin ediyorum worth a look.

Have you looked at the activity module? http://drupal.org/project/activity

Gerek yarı-yakın gelecekte böyle bir şey yapmak için, çünkü ben size gelip ne merak olacak.