Sincronizza il database con l'API esterna

1

Attualmente possiedo un sito web in cui i giocatori possono consultare le statistiche di un gioco. Quando qualcuno che non è nel mio database richiede ancora le loro statistiche, sto chiamando l'API con una richiesta PHP cURL e memorizzandole nel mio database.

Poi ho un cronjob che funziona ogni minuto, prende 1/5 dei giocatori nel database e aggiorna ogni utente nel database con l'API esterna (20 utenti per ogni richiesta).

Funzionava bene quando il mio database mysql era piccolo (1000/2000 utenti), ma la quantità di utenti aumenta molto velocemente e diventerà molto più presto, quindi ho bisogno di cambiare il modo in cui sto aggiornando gli utenti.

Il mio cronjob chiama attualmente uno script php che invia richieste CURL e aggiorna il database con la risposta.

Sarebbe meglio aggiornare i giocatori ogni ora e cambiare il cronjob php in un cronjob python? Potrei chiamare l'API quando l'utente richiede le sue statistiche ma a volte l'API esterna è molto lenta o non risponde e questo non mi consente di creare grafici.

In attesa di alcuni pensieri su questo.

    
posta Mike 29.09.2015 - 10:34
fonte

1 risposta

1

runs every minute

Per prima cosa mi assicurerò che sia necessario. Interrogare in modo aggressivo su un'API a volte ti rallenta o interrompe le query. (Dipende da chi lo sta eseguendo).

Riguardo PHP e cURL dovrebbero andare bene. Ho scritto un sistema simile che ha interrogato oltre 200.000 statistiche di personaggi in questo modo, ma l'ho fatto solo ogni ora in blocchi di circa 500 caratteri che penso fosse.

20 users each request

Trova la quantità minima di dati che ti serve e prova a interrogare la quantità massima di caratteri che puoi interrogare e utilizzare. Se è 20 allora sembra molto basso. Assicurati di costruire la query in modo ottimale anche per il loro sistema. A volte, a seconda dell'API, piuttosto che eseguire query per singoli caratteri o gruppi di caratteri, è molto più veloce interrogare per tutti i caratteri ordinati per ID (con un ultimo tempo di accesso > di dire qualche mese fa) con un inizio (offset da l'inizio) e limite. (Se l'API supporta tale funzione). Questo tende a permetterti di interrogare velocemente grandi blocchi di caratteri.

Se possibile, puoi anche cercare dati diversi a tariffe diverse. Di solito ci sono molti dati API che cambiano raramente.

Infine cerca o richiedi un'API basata su WebSocket. Molti giochi con dati in tempo reale li stanno configurando. Questi di solito funzionano come una coda di messaggi in cui è possibile iscriversi a determinate modifiche alle statistiche.

(Anche un ultimo commento: cerca il forum di discussione dell'API. Spesso la persona che lo gestisce pubblica lì e ti dice il modo ottimale in cui desiderano che le persone utilizzino l'API. Il tuo caso d'uso è abbastanza comune per molti siti ).

    
risposta data 29.09.2015 - 21:46
fonte

Leggi altre domande sui tag