Come gestire i dati in tempo reale dal punto di vista del database?

14

Ho un'idea in mente, ma mi confonde ancora l'area del database .

Immagina che voglio mostrare i dati in tempo reale e utilizzare una delle più recenti tecnologie del browser ( socket web - anche usando older browsers ) è molto facile mostrare a tutti gli osservabili (browser utente) cosa stanno facendo tutti.

Remy Sharp ha un esempio sulla semplicità di questo.

Ma non riesco ancora a ottenere la parte del database, come userò , immaginiamo (usando Remy gioco Tron) che voglio salvare il percorso per ogni utente connesso in un database e se un cliente vuole vedere cosa sta succedendo con un ritardo di 5 secondi , vedrà che, non solo i 5 secondi fino a quel momento, ma la continuazione nel tempo ...

Come posso interrogare un DB del genere?

SELECT x, y FROM run WHERE time >= DATEADD(second, -5, rundate);

non è il percorso consigliato giusto?

e tirando questa x in x time ... questo non è vero feed di dati corretto?

Se qualcuno può aiutarmi a capire il punto di vista del Database, lo apprezzerei molto.

    
posta balexandre 04.02.2011 - 23:36
fonte

4 risposte

7

I database relazionali sono ottimizzati per le relazioni. I database di serie temporali sono ottimizzati per l'archiviazione e il lavoro con una serie di valori che cambiano nel tempo. Nel mondo industriale, chiamano questi "storici". Probabilmente il più famoso è PI .

di OSI.

È possibile eseguire query su una serie di segnali per un determinato punto nel tempo, anche se non ha memorizzato un valore per quel particolare punto (può essere interpolato tra punti noti).

Tuttavia, ogni query ti dà solo un singolo punto nel tempo. Devi ancora sondare.

Continuando sul tema del database delle serie temporali, controlla openPDC (un concentratore di dati di Fasor è specifico per la rete elettrica, ma è uno storico delle serie storiche). Specificamente, questa citazione:

streaming playback utility that can be used to replay events from the local historian archive and extract large datasets

È proprio quello che vuoi ... una specie di meccanismo di riproduzione.

Non penso che tu voglia veramente un database. Vuoi un mucchio di FIFO.

    
risposta data 04.02.2011 - 23:54
fonte
7

Real Time e Database non hanno nulla a che fare l'uno con l'altro.

Quando ho realizzato i radar (e pompe di calore e sistemi di controllo delle navi) ho appreso che i dati in tempo reale vivono interamente nei buffer e nella memoria condivisa.

I dati possono anche essere inviati a un database per successive analisi e recupero. Il volume deve essere piccolo, quindi i riepiloghi o i digest o i campioni di dati vanno alla memoria permanente.

I dati effettivi in tempo reale, tuttavia, fluiscono attraverso la rete tramite code di messaggi per l'affidabilità o pacchetti UDP per notifiche istantanee (ma probabilmente fragili).

    
risposta data 05.02.2011 - 01:12
fonte
4

Inciampando su questa domanda penso che tu stia pensando a questo torto, e le altre risposte non mettono in evidenza il problema.

Martellare il tuo database non è davvero una buona idea. Mentre sono abbastanza sicuro che tu abbia capito questo, altri potrebbero non averlo. Ricordo che un mio amico ha provato a usare uno script php e una funzione JavaScript AJAX in un loop per un gioco semi-real time. Si è reso conto molto rapidamente che le prestazioni si sono deteriorate all'aumentare delle persone, semplicemente perché stava eseguendo una tonnellata di query al secondo che ha martellato il database.

Per come la vedo io, ci deve essere una lunga applicazione che si trova tra l'utente e il database. Gli utenti si connettono direttamente a questa applicazione e passano tutte le sue informazioni all'app. Questa applicazione li copia immediatamente le informazioni a tutti quelli ad essa connessi. Questo carica un'app molto leggera, poco traffico e in tempo reale.

Se è necessario utilizzare un database, l'app deve quindi gestirlo in una coda di aggiornamenti in background. Ovviamente devi scegliere e salvare ciò che salvi perché non vuoi martellare il database con un muro di piccole informazioni (come la posizione attuale di un utente in un gioco), che ti riporta allo stesso problema che hai iniziato con. Invece di posizione, memorizza la distanza percorsa in 5 secondi o altre informazioni più significative

    
risposta data 21.03.2011 - 03:14
fonte
0

Questo sito ha alcune funzionalità "in tempo reale". Scoprirai che molti siti ad alto traffico hanno molti giocattoli tra il server web e il database. Redis è qualcosa che puoi usare per tenere i dati in memoria. Sono sicuro che ce ne sono altri per vari stack.

Penso che Firebase.com sia un ottimo servizio dati in tempo reale (non sono sicuro di quello che fanno per il vero back-end del database, ma dal momento che lo servono, non sono sicuro che mi interessi davvero oltre la curiosità.)

    
risposta data 26.03.2016 - 20:23
fonte

Leggi altre domande sui tag