2010-11-04 15 views
5

Attualmente sto progettando un sistema in cui abbiamo bisogno di sapere se l'utente è ancora in linea/loggato.Progettazione di "Io sono vivo" Servizio

Il sistema è una rete Net basata, quindi abbiamo intenzione di fare questo utilizzando il codice AJAX/JSONP, che esegue il ping del server ogni 2 minuti.

C'è un numero elevato di utenti, quindi un ping ogni 2 minuti causa ca. 600 ping al secondo.

Abbiamo quindi intenzione di posizionare questo servizio sul proprio server e memorizzare tutte le informazioni in memoria utilizzando Velocity.

La cache sarà un mazzo di coppie con valore nominale, primo gruppo, persona e un timestamp per ogni persona.

Domanda è possibile scrivere direttamente sulla cache di velocità per ogni ping? O questo causerà il blocco? Dovremmo prima scrivere su una coda e poi aggiornare la cache dalla coda?

Contemporaneamente all'aggiornamento della cache ci saranno altri utenti che richiedono informazioni per gruppo.

+0

titoli per il gruppo Redis roba è modo più adatto: http://code.google.com/p/redis/wiki/SaddCommand ... Dubito che è necessario preoccuparsi di blocco o di concorrenza quando si accede velocità –

+0

http://msdn.microsoft.com/en-us/library/ee790890.aspx –

risposta

2

Penso che dovresti essere in grado di farlo se puoi cambiare il tuo modello per basare ogni elemento della cache attorno a un utente come se fosse un gruppo di utenti come hai menzionato. Se si richiede la possibilità di interrogare questi elementi per gruppo, si dovrebbe pensare a un modo per mantenere un indice (potenzialmente in memoria) delle chiavi e dei gruppi per interrogare gli elementi (la query sarebbe ovviamente un punto lento).

Ciò renderebbe la probabilità di voi aggiornare la stessa voce, allo stesso tempo vicino nill (come ogni cliente sarebbe l'aggiornamento solo ogni 2 minuti)

Ciò consentirebbe di sfruttare l'ottimistico Concurrency modello per velocità come discusso su MSDN sul link sottostante, senza perdere alcun dato.

http://msdn.microsoft.com/en-us/library/ee790890.aspx

Problemi correlati