j'ai une Application web (PHP/ Mysql ) qui a pour but de stocker des affaires , des client , des produits .. , la base Mysql commence a prendre beaucoup de volume et j'aimerais créer un système d’archivage automatique selon la condition suivante => les affaires qui ont une date de création supérieure a 60 jours doivent être archiver .
ma question est la suivante : comment je dois m'y prendre pour réaliser cette action d'archivage
-est ce que par exemple je dois créer des copiées de mes tables affaires , clients .... et archiver les affaires = > je trouve que ce n'est pas propre et que j’ai plus de 25 tables !!!
-est ce que par exemple je dois créer une table "archivage" avec une clé étrangère dans la table affaires qui me dit si c'est une affaires archiver ou en cours !!!
Si tes tables sont bien construites et correctement indexées, alors tu peux dépasser le million d'enregistrement sans que cela soir pénalisant, y compris avec MySQL ...
MassineBanoune a écrit:
les affaires qui ont une date de création supérieure a 60 jours doivent être archiver
Qu'entends-tu par archivage ? et dans quel but précisément ?
Souhaites-tu simplement limiter le nombre d'enregistrement affichés à tes utilisateurs ?
Souhaites-tu supprimer carrément les données de plus de 2 mois ?
Alors effectivement t'as raison de me parler du nombre de lignes ( pour l'instant je ne suis que 2500 ) donc j'ai encore bcp mais alors bcp d’espace
le probleme c'est au moment de l’affichage car j'utilise un datatable (https://datatables.net/) et il est très lent lors de l'affichage .
la solution => j’exerce une requête d'affichage avec un
where ... and (DATEDIFF(CURDATE(),date_creation) < 60
le probleme maintenant c'est dans mes pièces jointes car chaque affaire possède des pièces jointes qui sont stockées dans un dossier de mon application et en même temps leurs nom leur URL est stocké dans une table.
Ce que je voudrai c'est que par exemple, un utilisateur crée une affaires et insère une pièce jointe. une fois que l'affaire est close. Les pièces jointes sont toujours sur mon serveur et utilise de la mémoire disque inutilement. Je souhaiterai que ces fichiers des affaires qui ont plus de 2 mois (60 jours), soit supprimer automatiquement .
Merci et désolé d'avoir changé de question en milieu de discussion
Selon moi, pour le côté affichage, la solution de filtrer dans la requête SQL avec une clause WHERE sur la date est suffisante et pertinente. Je ne pense pas que tu ais besoin de réfléchir à un archivage des données, que tu pourrais d'ailleurs regretter si un besoin d'analyse d'historique d'activité apparaît dans le temps ...
Concernant les fichiers physiques (pièces jointes) c'est en effet une autre question. Mais là encore attention ... de quelle volumétrie parlons-nous ? Plusieurs Mo, Go, To ? Un disque dur, y compris sur un serveur, peut largement supporter plusieurs dizaines de Go sans broncher, même sur des offres d'hébergement gratuites ou premier prix ...
Ce n'est pas dans ce sens qu'il faut se poser la question, mais plutôt : "Vais-je avoir besoin de ces données/fichiers dans X semaines/mois/années ?"
Si non, alors la suppression des données/fichiers peut être envisagées.
Si oui, alors il faut se demander de quel niveau de détail auras-tu besoin dans X semaines/mois/années pour déterminer quels données/fichiers conserver, combien de temps et dans quel niveau d'accessibilité ce serait acceptable ? faudra-t-il demander à quelqu'un de précis d'aller remonter une sauvegarde ? faudra-t-il un accès immédiat mais seulement de données consolidées (totaux, bilans, etc.) ?
Déplacement vers un forum plus approprié
Le sujet est déplacé de la section Base de données vers la section Discussions développement
pour les pièces jointes c'est plus compliqué que çà car je suis déjà a 18 GB après 5 mois de la mise en prod de l'application , donc je pense a un moyen qui me permettra de supprimer les fichiers physiques (pièces jointes) qui ont plus de 2 mois toutes en gardant uniquement les informations clés comme le nom et le numéro de la piece dans la base de donnée
Dans tous les cas, la suppression de fichiers physiques ne se fera pas avec MySQL mais par du code côté serveur web (PHP ?).
Le principe peut être de récupérer de MySQL la liste des fichiers datant de plus de X mois, de leur mettre un attribut "supprimé" (ne supprimer la ligne en BDD pour garder la trace de ce qui a été présent un jour), et de supprimer le fichier physique correspondant ...
j'ai lu qlqpart comme quoi il faut utiliser un CRON mais je suis pas trop fan
Bah pourquoi ? C'est quand même la meilleure solution ...
Après si tu ne veux pas utiliser CRON, tu peux inclure dans le code de ta page d'accueil d'application le contrôle des fichiers à supprimer, ainsi chaque fois que la page d'accueil sera affichée, les fichiers trop anciens seront supprimés ... Si les utilisateurs se connectent tous les jours cela sera efficace ...
Finalement je suis resté sur une solution simple , dans mon cas quand j'y pense je n'ai pas besoin que le script s’exécute chaque 2 mois je veux juste supprimer les pieces jointes des affaires de plis de 2 mois donc sur l'une de mes pages les moins visité j'ai placé un bout de code en PHP
( je voulais pas le mettre dans la page d’accueil car ya bcp de visite sur cette page )
je voulais pas le mettre dans la page d’accueil car ya bcp de visite sur cette page
Ce n'aurait pas été très grave, puisque en soit le code exécute juste une requête de plus (ce n'est pas la mort), d'autant que cette requête n'est pas forcément gourmande puisque si elle est lancée régulièrement il ne devrait pas y avoir souvent des données à supprimer ...
Mais bon, l'essentiel c'est que cela fonctionne.
Après, une tâche CRON quotidienne (planifiée dans la nuit au pire) aurait été plus pertinente je pense ...
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
banounemassine
banounemassine
banounemassine
banounemassine
banounemassine