Sqlserver
 sql >> Teknologi Basis Data >  >> RDS >> Sqlserver

Bagaimana cara menerapkan lencana?

Implementasi yang mirip dengan Stackoverflow sebenarnya jauh lebih sederhana daripada yang Anda jelaskan, berdasarkan sedikit info yang diberikan oleh tim sesekali.

Di database, Anda cukup menyimpan kumpulan BadgeID -UserID pasang untuk melacak siapa yang memiliki apa (dan jumlah atau ID baris untuk memungkinkan beberapa penghargaan untuk beberapa lencana).

Dalam aplikasi, ada objek pekerja untuk setiap jenis lencana. Objek berada dalam cache, dan ketika cache kedaluwarsa, pekerja menjalankan logikanya sendiri untuk menentukan siapa yang harus mendapatkan lencana dan membuat pembaruan, lalu memasukkan kembali dirinya ke dalam cache:

public abstract class BadgeJob
{
    protected BadgeJob()
    {
        //start cycling on initialization
        Insert();
    }

    //override to provide specific badge logic
    protected abstract void AwardBadges();

    //how long to wait between iterations
    protected abstract TimeSpan Interval { get; }

    private void Callback(string key, object value, CacheItemRemovedReason reason)
    {
        if (reason == CacheItemRemovedReason.Expired)
        {
            this.AwardBadges();
            this.Insert();
        }
    }

    private void Insert()
    {
        HttpRuntime.Cache.Add(this.GetType().ToString(),
            this,
            null,
            Cache.NoAbsoluteExpiration,
            this.Interval,
            CacheItemPriority.Normal,
            this.Callback);
    }
}

Dan implementasi nyata:

public class CommenterBadge : BadgeJob
{
    public CommenterBadge() : base() { }

    protected override void AwardBadges()
    {
        //select all users who have more than x comments 
        //and dont have the commenter badge
        //add badges
    }

    //run every 10 minutes
    protected override TimeSpan Interval
    {
        get { return new TimeSpan(0,10,0); }
    }
}


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. TSQL 2005, XML DML - Perbarui Dua Nilai sekaligus?

  2. SQL Server ROWCOUNT_BIG()

  3. Pangkas (bukan bulat) tempat desimal di SQL Server

  4. SQL Server ORDER BY tanggal dan nol terakhir

  5. Peningkatan Kinerja &Pengelolaan Tersembunyi di SQL Server 2012/2014