Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Как да внедрим баджове?

Реализация, подобна на Stackoverflow, всъщност е много по-проста, отколкото описахте, въз основа на част от информацията, изпускана от екипа от време на време.

В базата данни вие просто съхранявате колекция от BadgeID -UserID двойки, за да проследите кой какво има (и брой или rowID, за да позволите множество награди за някои значки).

В приложението има работни обекти за всеки тип бадж. Обектът е в кеша и когато кешът изтече, работникът изпълнява своя собствена логика за определяне кой трябва да получи значката и извършване на актуализациите, след което се вмъква отново в кеша:

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);
    }
}

И конкретно изпълнение:

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?

  2. Динамичен SQL с цикъл върху всички колони в таблица

  3. Разгръщане на сертификат за криптирана връзка SQL Server

  4. Как правите заявка в int колона за произволна стойност?

  5. Най-лесният начин за валидиране на потребител в съхранена процедура?