Sqlserver
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Sqlserver

Làm thế nào để triển khai huy hiệu?

Việc triển khai tương tự như Stackoverflow thực sự đơn giản hơn nhiều so với những gì bạn đã mô tả, dựa trên các bit thông tin được nhóm đưa ra sau một thời gian.

Trong cơ sở dữ liệu, bạn chỉ cần lưu trữ một bộ sưu tập BadgeID - UserID các cặp để theo dõi ai có cái gì (và số lượng hoặc một ID hàng để cho phép nhiều giải thưởng cho một số huy hiệu).

Trong ứng dụng, có một đối tượng công nhân cho mỗi loại huy hiệu. Đối tượng đang ở trong bộ nhớ cache và khi bộ nhớ cache hết hạn, worker sẽ chạy logic của riêng nó để xác định ai sẽ nhận được huy hiệu và thực hiện cập nhật, sau đó nó tự chèn lại vào bộ nhớ 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);
    }
}

Và một cách triển khai cụ thể:

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. Cách khắc phục “Không thành công câu lệnh ALTER TABLE SWITCH” Msg 4982 (SQL Server)

  2. Tìm các trường không được sử dụng (có tất cả các trường rỗng)

  3. SQL Server là gì?

  4. UPDATE hoặc MERGE của các bảng rất lớn trong SQL Server

  5. Nhóm T-SQL Hàng thành Cột