Pour une solution de récolte de ce genre, je vous recommande un multi-étape de l'approche. Redis est bon à la communication en temps réel. Redis est conçu comme une mémoire de la clé/valeur en magasin et hérite de quelques très belles avantages d'être une mémoire de base de données: O(1) la liste des opérations. Tant qu'il y est de la RAM pour une utilisation sur un serveur, Redis ne sera pas ralentir en le poussant vers la fin de vos listes de ce qui est bien quand vous avez besoin d'insérer des éléments à un taux extrême. Malheureusement, Redis peut pas fonctionner avec des ensembles de données plus grande que la quantité de RAM que vous avez (il n' écrit sur le disque, la lecture est de redémarrer le serveur ou dans le cas d'une panne du système) et de mise à l'échelle doit être fait par vous et votre application. (Une façon courante est de répandre les touches sur de nombreux serveurs, ce qui est mis en œuvre par certains Redis pilotes en particulier ceux pour Ruby on Rails.) Redis dispose également d'un support pour la simple publication/abonnement par messagerie, ce qui peut être utile à la fois.
Dans ce scénario, Redis est "la première étape." Pour chaque type spécifique d'événement vous créer une liste dans le Redis avec un nom unique; par exemple, nous avons des "pages vues" et "lien cliqué." Pour des raisons de simplicité nous voulons nous assurer que les données dans chaque liste est la même structure; lien cliqué peut avoir un jeton d'utilisateur, nom du lien et l'URL, alors que l'affichage de la page ne peut avoir le token de l'utilisateur et l'URL. Votre première préoccupation est le fait qu'il s'est passé et quel que soit absolument nécessaire les données dont vous avez besoin est poussé.
Ensuite, nous avons quelques exemples simples de traitement des travailleurs qui prennent ce frénétiquement inséré les informations sur le Redis mains, en lui demandant d'enlever un élément de la fin de la liste et de le remettre. Le travailleur peut faire des ajustements/déduplication/ID recherches nécessaires pour produire les données et de les remettre pour une base plus permanente, le site de stockage. Le feu jusqu'à que beaucoup de ces travailleurs que vous avez besoin de garder Redis " mémoire de la charge supportable. Vous pouvez écrire les travailleurs dans tout ce que vous souhaitez (Node.js, C#, Java, ...), tant qu'il a un Redis pilote (la plupart des langages web faire maintenant) et un pour votre stockage souhaité (SQL, Mongo, etc.)
MongoDB est bonne à la de stockage de document. Contrairement Redis il est en mesure de traiter avec les bases de données de plus de RAM et il prend en charge la fragmentation/réplication sur son propre. Un avantage de MongoDB sur SQL options, c'est que vous n'avez pas à avoir un schéma prédéterminé, vous êtes libre de changer la façon dont les données sont stockées toutefois vous souhaitez à tout moment.
Je voudrais, cependant, suggèrent Redis ou Mongo pour la "première étape" de la phase de tenue des données pour le traitement et l'utilisation traditionnelle de l'installation de SQL (Postgresql ou MSSQL, peut-être) pour stocker de post-traitement des données. Le suivi du comportement des clients sonne comme données relationnelles pour moi, puisque vous pouvez aller sur "montre-moi tout le monde qui regarde cette page" ou "Combien de pages cette personne a vue à ce jour donné" ou "Ce jour-là avait le plus de spectateurs au total?". Il existe peut-être encore plus complexes, des jointures ou des requêtes pour des fins analytiques, vous venez avec, et mature SQL solutions peut faire beaucoup de ce filtrage pour vous; NoSQL (Mongo ou Redis en particulier) ne peut pas faire des jointures ou des requêtes complexes dans les divers ensembles de données.