2012-01-26 3 views
0

J'ai un certain nombre de fichiers sur mon site qui sont privés et poussés à travers php. Je garde une trace des téléchargements en utilisant une base de données mysql. Actuellement, j'utilise une colonne pour chaque fichier et j'insère une nouvelle ligne pour chaque jour, ce qui est correct car je n'ai pas beaucoup de fichiers.Stocker un nombre variable de statistiques de téléchargement de fichiers dans la base de données mysql

Cependant, je vais commencer à ajouter et supprimer des fichiers assez souvent, et le nombre de fichiers deviendra très important. Comme je le vois j'ai deux options:

Le premier est d'ajouter et supprimer des colonnes pour chaque fichier comme ils sont ajoutés et supprimés. Cela conduirait rapidement à la table ayant beaucoup de colonnes. Je suis autodidacte donc je ne suis pas sûr, mais je pense que c'est probablement une très mauvaise chose. Ajouter et supprimer des colonnes une fois qu'il y a beaucoup de lignes semble une opération très coûteuse.

Je pourrais aussi créer une nouvelle base de données avec un fichier générique 'fileID' feild, et ensuite ajouter une nouvelle ligne tous les jours pour chaque fichier, mais cela conduirait à beaucoup de lignes. De plus, il y aurait beaucoup d'opérations d'insertion de lignes pour créer un suivi pour le jour suivant.

Quel serait le meilleur? Ou y a-t-il une troisième solution qui me manque? Dois-je utiliser autre chose que mysql? Je veux quelque chose qui peut être interrogé afin que je puisse afficher les statistiques sous forme de graphiques sur le site.

Merci beaucoup pour votre aide et pour avoir pris le temps de lire.

Répondre

1

Je pourrais également créer une nouvelle base de données avec un feild 'fileID' générique, et ensuite ajouter une nouvelle ligne tous les jours pour chaque fichier, mais cela conduirait à beaucoup de lignes.

Oui, c'est ce que vous devez faire — mais vous voulez dire « une nouvelle tableau », et non « une nouvelle base de données ».

Fondamentalement, vous aurez besoin d'un tableau file, ce qui pourrait ressembler à ceci:

id | name  | created_date | [other fields ...] 
----+-----------+--------------+-------------------- 
    1 | foo.txt | 2012-01-26 | ... 
    2 | bar.txt | 2012-01-27 | ... 

et votre table downloads_by_day se référer:

id | file_id | `date`  | download_count 
----+---------+------------+---------------- 
    1 |  1 | 2012-01-27 |    17 
    2 |  2 | 2012-01-27 |    23 
    3 |  1 | 2012-01-28 |    6 
    4 |  2 | 2012-01-28 |   195 
+0

Ah, tu as raison, je l'ai fait signifie une nouvelle table. –

+0

Oups, ne savait pas entrer serait soumettre ceux-ci. Quoi qu'il en soit, si je ne trouve pas d'autre solution, je l'utiliserai. Merci pour votre réponse. Je suis juste nouveau et je ne suis pas sûr de l'efficacité de mes designs. –

+1

@JeremyMiller: Ne dites pas "si je ne trouve pas d'autre solution". Croyez-moi, c'est presque certainement ce que vous voulez faire. (J'ai d'ailleurs élargi un peu ma réponse pour montrer à quoi cela ressemblerait.) – ruakh

Questions connexes