2010-04-25 32 views
2

Je prévois de connecter mes instances de calamar à un mongodb, mais le vrai problème est que nous avons un énorme trafic à consigner, chaque accès authentifié avec l'utilisateur/passe. Finalement, nous devons faire des rapports basés sur les journaux. Je pensais d'insérer les journaux distribués par mois et par les utilisateurs, ma collection ressemblera à ceci:Squid se connecte sur mongodb

{month: 'april', users: [{user: 'loop0', logs: [{timestamp: 12345678.9, url: 'http://stackoverflow.com/question/ask', ... }]}] 

Donc, si je veux générer mes rapports basés sur le mois d'avril, je viens d'obtenir le droit mois au lieu de regarder en zillions de lignes pour aller chercher les lignes qui correspondent à timestamp entre Avril, 1 et Avril, 30.

Bien sûr, ce type d'insertion sera plus lent que d'insérer directement la ligne de journal. Ma question est la suivante: y a-t-il une meilleure façon de faire cela?

De nos jours, nous avons environ 12 millions de lignes de journaux par jour.

Répondre

0

Il est difficile de dire sans connaître les détails, mais je dirais que vous vous inquiétez probablement du mauvais problème: vous pensez à la vitesse d'insertion plutôt qu'à la vitesse de calcul du rapport. Mongo a toute la journée pour stocker ces 12 millions d'entrées, mais vous pouvez vouloir le rapport - couvrant peut-être un demi-milliard d'entrées (~ = 1 mois de données) - à rendre en temps réel (secondes peut-être une minute). De ce point de vue, il est probablement conseillé d'optimiser pour la lecture, plutôt que pour l'écriture.

0

Vous pouvez également créer une nouvelle collection tous les mois. Ou stocker les données deux fois. L'espace disque est bon marché.