Partage
  • Partager sur Facebook
  • Partager sur Twitter

archivage de donées sur Mysql

Sujet résolu
    26 avril 2021 à 15:35:30

    Bonjour tout le monde ,

    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 !!!

    Merci par avance .

    • Partager sur Facebook
    • Partager sur Twitter

    banounemassine

      26 avril 2021 à 16:43:24

      Bonjour,

      MassineBanoune a écrit:

      Mysql commence a prendre beaucoup de volume

      C'est à dire ? De quel volume est-il question ?

      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 ?

      -
      Edité par Benzouye 26 avril 2021 à 17:56:29

      • Partager sur Facebook
      • Partager sur Twitter
      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
        26 avril 2021 à 17:32:38

        Bonjour Benzouy ,

        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

        -
        Edité par Massi.dev 26 avril 2021 à 17:51:59

        • Partager sur Facebook
        • Partager sur Twitter

        banounemassine

          26 avril 2021 à 18:01:58

          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

          -
          Edité par Benzouye 26 avril 2021 à 18:02:38

          • Partager sur Facebook
          • Partager sur Twitter
          Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
            27 avril 2021 à 16:17:37

            Mercj Benzouy ,

            Alors pour la question initiale (réduire le nombre de ligne a l'affichage ) j'ai trouvé une meilleure solution , elle consiste a  utiliser  l'option Scroller du plugin Datatable (https://datatables.net/extensions/scroller/examples/initialisation/simple.html) , elle charge les lignes en scrollant .

            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

            • Partager sur Facebook
            • Partager sur Twitter

            banounemassine

              27 avril 2021 à 17:13:16

              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 ...

              -
              Edité par Benzouye 27 avril 2021 à 17:13:53

              • Partager sur Facebook
              • Partager sur Twitter
              Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                27 avril 2021 à 17:52:37

                salut Benzouye,

                oui c'est ce que je compte faire

                ajouter un champ dans la table pieces jointe qui m'indique l'état du fichier(piece jointe)

                0 -> pour les pièces déjà supprimées .

                1 -> pour les pièces non supprimées (en cours) .

                je fais une requête pour récupérer toutes les pièces (les URLs) en cours et qui ont plus de 60 jours

                j'utilise la fonction unlink avec une boucle et le tour est joué


                seul souci comment faire cette opération automatiquement  , j'ai lu qlqpart comme quoi il faut utiliser un CRON mais je suis pas trop fan

                • Partager sur Facebook
                • Partager sur Twitter

                banounemassine

                  27 avril 2021 à 18:17:40

                  MassineBanoune a écrit:

                  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 ...

                  • Partager sur Facebook
                  • Partager sur Twitter
                  Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL
                    28 avril 2021 à 17:38:33

                    Salut Benzouye ,

                     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 )

                    • Partager sur Facebook
                    • Partager sur Twitter

                    banounemassine

                      28 avril 2021 à 18:47:31

                      MassineBanoune a écrit:

                      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 ...

                      -
                      Edité par Benzouye 28 avril 2021 à 18:48:36

                      • Partager sur Facebook
                      • Partager sur Twitter
                      Seul on va plus vite, ensemble on va plus loin ... A maîtriser : Conception BDD, MySQL, PHP/MySQL

                      archivage de donées sur Mysql

                      × 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.
                      • Editeur
                      • Markdown