Je suis sur une pile LAMP pour un site Web que je gère. Il est nécessaire de regrouper les statistiques d'utilisation (une variété de choses liées à notre produit de bureau).Processus de statistiques de longue durée - réflexions sur le choix de la langue?
J'ai d'abord abordé le problème avec PHP (étant donné que j'avais déjà un tas de classes pour travailler avec les données). Tout a bien fonctionné sur ma boîte de dev qui utilisait 5.3. En bref, la gestion de la mémoire 5.1 semble être bien pire, et j'ai dû faire beaucoup de tromperie pour que les scripts de roll-up à long terme s'exécutent dans un espace mémoire fixe. Nos serveurs ne veulent pas mettre à jour PHP en ce moment. Depuis, j'ai ramené mon serveur dev à 5.1 pour ne plus rencontrer ce problème. Pour explorer des bases de données MySQL pour compiler des statistiques pour différentes périodes et résolutions, en exécutant potentiellement un processus qui le fait tout le temps dans le futur (par opposition à un calendrier cron), quel choix de langue recommandez-vous? Je regardais Python (je le sais plus ou moins), Java (je ne le connais pas très bien), ou je le faisais avec PHP (je le connais très bien).
Edit: clarification de conception pour commentateur
Résolutions: La façon dont fonctionne le script actuellement Rollup, est que j'ai des cours pour définir des résolutions et des seaux. J'ai l'année, le mois, la semaine, le jour - étant donné un «numéro de compartiment», chaque classe donne un horodatage de début et de fin qui définit la plage de temps pour ce compartiment - basé sur une date d'époque arbitraire. Le système maintient des enregistrements "complets", c'est-à-dire qu'il complètera son ensemble de données enroulé pour chaque résolution depuis la dernière fois qu'il a été exécuté, actuellement. SQL Strat: Les statistiques de base se trouvent dans de nombreux schémas et tables dissemblables. Je fais des requêtes individuelles pour chaque statistique enroulée pour la plupart, puis remplis un enregistrement pour insertion. Votre suggérez sous-requêtes imbriquées telles que:
INSERT dans rolled_up_stats (someval, someval, someval, ...) VALUES (SELECT SUM (somestat) de someschema, SELECT AVG (somestat2) de someschema2)
Ces sous-requêtes va générer des tables temporaires, non? Mon expérience a été lente comme la mélasse dans le passé. Est-ce une meilleure approche?
Edit 2: Ajout des réponses inline à la question
La langue était un goulot d'étranglement dans le cas de 5,1 php - je essentiellement ai dit que je fait le choix de mauvaise langue (bien que les scripts fonctionnait bien sur 5.3). Vous parlez de python, que je vérifie pour cette tâche. Pour être clair, ce que je fais est de fournir un outil de gestion pour les statistiques d'utilisation d'un produit de bureau (les journaux sont réellement écrits par un serveur EJB aux tables mysql). Je fais l'analyse de dossier de notation d'apache, aussi bien que plus de reportage de Web sur le côté Web, mais ce projet est séparé. L'approche que j'ai prise jusqu'ici est des tableaux agrégés. Je ne suis pas sûr de ce que ces produits de file d'attente de messages pourraient faire pour moi, je jetterai un coup d'oeil. Pour aller un peu plus loin - les données sont utilisées pour représenter l'activité dans le temps au niveau du service et du client, pour permettre à la direction de comprendre comment le produit est utilisé. Vous pouvez sélectionner une période (du 1er avril au 10 avril) et extraire un graphique du nombre total de minutes d'utilisation d'une certaine entité à différentes granularités (heures, jours, mois, etc.) en fonction de la période sélectionnée. C'est essentiellement une analyse après-coup de l'utilisation.Le besoin semble tendre vers le temps réel, cependant (regardez la dernière heure d'utilisation)
1. Pourquoi voulez-vous que cela dure longtemps? Pourquoi le fonctionnement périodique de cron-job n'est-il pas suffisant? 2. J'ai supposé que les scripts de roll-up exécutaient un SQL comme "INSERT INTO RolledUpTable SELECT SUM (quelque chose) de RawTable GROUPBY Element_id" ou une telle, mais vous semblez impliquer que les scripts de roll-up lisent l'information dans le processus , traitez-les, puis poussez-les dans la base de données. Cela ressemble à un choix de conception étrange. S'il vous plaît clarifier votre question :) – moshez
clarifications ajoutées ... sorte de spawns une question distincte si ;-) – Josh
En outre, il ne doit pas nécessairement être long terme. La raison pour laquelle je pensais que cela pourrait être une bonne approche est que, après avoir utilisé le système, les gens sont déjà intéressés par les données en temps quasi réel à une résolution horaire. Peut être une demande déraisonnable, mais en supposant que ce ne soit pas, un travail cron ne semble pas couper la moutarde. – Josh