Domanda

Helo,

Ho implementato un'applicazione di chat utilizzando Comet. la richiesta è "appendere" sul server fino a quando i nuovi messaggi arive. E ', dunque, torna al client con i nuovi messaggi, e va nuovamente al server.

Il mio problema è il seguente:

Al fine di verificare la presenza di nuovi messaggi, ho POLL ogni 600 ms il database. Eseguo una semplice query "select ... da messaggi in cui messageId> '+ lastMessageId.

Inoltre, al fine di mantenere la presenza, aggiorno il database molto (molto) spesso con ogni utente "LastKeepAliveTime".

Il log delle transazioni di SQL Server è in crescita enorme, e, ad un certo punto, la mia applicazione di chat smette di funzionare.

Gli utenti di chat non sono utenti registrati, gli utenti sono solo casuali che possono lasciare la pagina in qualsiasi momento.

grazie Yaron

È stato utile?

Soluzione

Hai bisogno di un oggetto cache comune per l'ultimo mantenere le informazioni in vita? Sembra proprio una piccola quantità di informazioni e si potrebbe evitare un sacco di aggiornamenti SQL.

Altri suggerimenti

Ecco come mantenere il log delle transazioni da ottenere fuori controllo: http://support.microsoft. com / kb / 873235

Opzioni in questo articolo includono:

  • Fare uno strizzacervelli.
  • Modifica della dimensione del registro.
  • Configurazione espansione automatica.
  • Cambiare il modello di recupero.
  • Il backup del file di registro regolarmente.

e altro ancora.

Come nota a margine, può essere utile per impostare un elenco di utenti e le loro ultime date di attività che si memorizzano come oggetti nel vostro stato di applicazione. Sarebbe più veloce per accedere a quel modo e si potrebbe persistere i valori meno frequentemente.

Il passaggio da pieno log delle transazioni modalità alla modalità semplice dovrebbe risolvere i vostri problemi di crescita di log.

Tuttavia, vorrei anche aggiungere che è generalmente una buona idea per evitare di polling, se possibile, dal momento che non è scalabile. Si potrebbe prendere in considerazione il passaggio a un modello event-driven usando Service Broker o SqlDependency. Ci sono altri approcci per keep-alive, anche.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top