2010-12-11 52 views
3

De la même manière que google analytics envoie des balises à partir de javascript qui suivent des événements, quels sont les moyens les plus efficaces de collecter ces données de balise et de les renvoyer au client dans les meilleurs délais? Par exemple, si j'ai un appel de balise serveur à serveur, je veux faire cet appel aussi vite que possible sur le serveur client.Quel est le moyen le plus efficace de stocker des balises d'analyse?

PHP à un fichier à plat? PHP dans une file d'attente locale? Java Server qui se connecte à une file d'attente et maintient une connexion à la file d'attente à distance tout le temps? serveur C++ personnalisé?

Ce serait de l'ordre de 1000 demandes par seconde.

Répondre

1

Il y a 2 aspects à ceci. 1) l'appel de la balise du client doit être effectué le plus rapidement possible. Cela signifie que la demande HTTP entrante doit répondre 200 OK et quitter le plus tôt possible, donc il ne devrait probablement pas faire l'écriture de données elle-même. Il devrait remettre cela à un autre processus en arrière-plan, soit par une exécution de shell en arrière-plan, soit en utilisant un mécanisme de file d'attente/travail tel que Gearman.

2) L'écriture de données elle-même, si elle est effectuée dans un fil de fond loin de l'attention du client, a un peu plus de temps de luxe. 1000 écritures par seconde devraient convenir à une base de données moderne et bien configurée avec un verrouillage de ligne qui n'est pas trop sollicité au même instant. Peut-être, cependant, cela pourrait être un bon scénario pour un key-value store pour le stockage immédiat des données. Ensuite, un processus d'analyse/reporting séparé peut interroger le magasin de valeurs-clés hors ligne pour toutes les données stockées, les traiter et éventuellement les copier dans une base de données.